This tag is used fro redirecting other tags to a ToC or another tiddler through the freelinks function.
<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://over-open-sights.blogspot.com/2020/04/a-company-2-battalion-princes-victorias.html"></iframe>
show
show
show
show
{
    "tiddlers": {
        "$:/Acknowledgements": {
            "title": "$:/Acknowledgements",
            "text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
        },
        "$:/core/copyright.txt": {
            "title": "$:/core/copyright.txt",
            "type": "text/plain",
            "text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2020, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
        },
        "$:/core/icon": {
            "title": "$:/core/icon",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
        },
        "$:/core/images/add-comment": {
            "title": "$:/core/images/add-comment",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"
        },
        "$:/core/images/advanced-search-button": {
            "title": "$:/core/images/advanced-search-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"
        },
        "$:/core/images/auto-height": {
            "title": "$:/core/images/auto-height",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
        },
        "$:/core/images/blank": {
            "title": "$:/core/images/blank",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"
        },
        "$:/core/images/bold": {
            "title": "$:/core/images/bold",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"
        },
        "$:/core/images/cancel-button": {
            "title": "$:/core/images/cancel-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"
        },
        "$:/core/images/chevron-down": {
            "title": "$:/core/images/chevron-down",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"
        },
        "$:/core/images/chevron-left": {
            "title": "$:/core/images/chevron-left",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"
        },
        "$:/core/images/chevron-right": {
            "title": "$:/core/images/chevron-right",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"
        },
        "$:/core/images/chevron-up": {
            "title": "$:/core/images/chevron-up",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"
        },
        "$:/core/images/clone-button": {
            "title": "$:/core/images/clone-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"
        },
        "$:/core/images/close-all-button": {
            "title": "$:/core/images/close-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"
        },
        "$:/core/images/close-button": {
            "title": "$:/core/images/close-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"
        },
        "$:/core/images/close-others-button": {
            "title": "$:/core/images/close-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"
        },
        "$:/core/images/copy-clipboard": {
            "title": "$:/core/images/copy-clipboard",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"
        },
        "$:/core/images/delete-button": {
            "title": "$:/core/images/delete-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"
        },
        "$:/core/images/done-button": {
            "title": "$:/core/images/done-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"
        },
        "$:/core/images/down-arrow": {
            "title": "$:/core/images/down-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"
        },
        "$:/core/images/download-button": {
            "title": "$:/core/images/download-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"
        },
        "$:/core/images/edit-button": {
            "title": "$:/core/images/edit-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"
        },
        "$:/core/images/erase": {
            "title": "$:/core/images/erase",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"
        },
        "$:/core/images/excise": {
            "title": "$:/core/images/excise",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"
        },
        "$:/core/images/export-button": {
            "title": "$:/core/images/export-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"
        },
        "$:/core/images/file": {
            "title": "$:/core/images/file",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"
        },
        "$:/core/images/fixed-height": {
            "title": "$:/core/images/fixed-height",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
        },
        "$:/core/images/fold-all-button": {
            "title": "$:/core/images/fold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"
        },
        "$:/core/images/fold-button": {
            "title": "$:/core/images/fold-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"
        },
        "$:/core/images/fold-others-button": {
            "title": "$:/core/images/fold-others-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
        },
        "$:/core/images/folder": {
            "title": "$:/core/images/folder",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"
        },
        "$:/core/images/full-screen-button": {
            "title": "$:/core/images/full-screen-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"
        },
        "$:/core/images/github": {
            "title": "$:/core/images/github",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"
        },
        "$:/core/images/gitter": {
            "title": "$:/core/images/gitter",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"
        },
        "$:/core/images/globe": {
            "title": "$:/core/images/globe",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"
        },
        "$:/core/images/heading-1": {
            "title": "$:/core/images/heading-1",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"
        },
        "$:/core/images/heading-2": {
            "title": "$:/core/images/heading-2",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"
        },
        "$:/core/images/heading-3": {
            "title": "$:/core/images/heading-3",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"
        },
        "$:/core/images/heading-4": {
            "title": "$:/core/images/heading-4",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"
        },
        "$:/core/images/heading-5": {
            "title": "$:/core/images/heading-5",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"
        },
        "$:/core/images/heading-6": {
            "title": "$:/core/images/heading-6",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"
        },
        "$:/core/images/help": {
            "title": "$:/core/images/help",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"
        },
        "$:/core/images/home-button": {
            "title": "$:/core/images/home-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"
        },
        "$:/core/images/import-button": {
            "title": "$:/core/images/import-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"
        },
        "$:/core/images/info-button": {
            "title": "$:/core/images/info-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"
        },
        "$:/core/images/italic": {
            "title": "$:/core/images/italic",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"
        },
        "$:/core/images/left-arrow": {
            "title": "$:/core/images/left-arrow",
            "created": "20150315234410875",
            "modified": "20150315235324760",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"
        },
        "$:/core/images/line-width": {
            "title": "$:/core/images/line-width",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"
        },
        "$:/core/images/link": {
            "title": "$:/core/images/link",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"
        },
        "$:/core/images/linkify": {
            "title": "$:/core/images/linkify",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"
        },
        "$:/core/images/list-bullet": {
            "title": "$:/core/images/list-bullet",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"
        },
        "$:/core/images/list-number": {
            "title": "$:/core/images/list-number",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"
        },
        "$:/core/images/list": {
            "title": "$:/core/images/list",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"
        },
        "$:/core/images/locked-padlock": {
            "title": "$:/core/images/locked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
        },
        "$:/core/images/mail": {
            "title": "$:/core/images/mail",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"
        },
        "$:/core/images/menu-button": {
            "title": "$:/core/images/menu-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"
        },
        "$:/core/images/mono-block": {
            "title": "$:/core/images/mono-block",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"
        },
        "$:/core/images/mono-line": {
            "title": "$:/core/images/mono-line",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"
        },
        "$:/core/images/new-button": {
            "title": "$:/core/images/new-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"
        },
        "$:/core/images/new-here-button": {
            "title": "$:/core/images/new-here-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"
        },
        "$:/core/images/new-image-button": {
            "title": "$:/core/images/new-image-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"
        },
        "$:/core/images/new-journal-button": {
            "title": "$:/core/images/new-journal-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><<now \"DD\">></tspan></text></g></svg>"
        },
        "$:/core/images/opacity": {
            "title": "$:/core/images/opacity",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"
        },
        "$:/core/images/open-window": {
            "title": "$:/core/images/open-window",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"
        },
        "$:/core/images/options-button": {
            "title": "$:/core/images/options-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"
        },
        "$:/core/images/paint": {
            "title": "$:/core/images/paint",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"
        },
        "$:/core/images/palette": {
            "title": "$:/core/images/palette",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"
        },
        "$:/core/images/permalink-button": {
            "title": "$:/core/images/permalink-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"
        },
        "$:/core/images/permaview-button": {
            "title": "$:/core/images/permaview-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"
        },
        "$:/core/images/picture": {
            "title": "$:/core/images/picture",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"
        },
        "$:/core/images/plugin-generic-language": {
            "title": "$:/core/images/plugin-generic-language",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
        },
        "$:/core/images/plugin-generic-plugin": {
            "title": "$:/core/images/plugin-generic-plugin",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
        },
        "$:/core/images/plugin-generic-theme": {
            "title": "$:/core/images/plugin-generic-theme",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"
        },
        "$:/core/images/preview-closed": {
            "title": "$:/core/images/preview-closed",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"
        },
        "$:/core/images/preview-open": {
            "title": "$:/core/images/preview-open",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"
        },
        "$:/core/images/print-button": {
            "title": "$:/core/images/print-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"
        },
        "$:/core/images/quote": {
            "title": "$:/core/images/quote",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"
        },
        "$:/core/images/refresh-button": {
            "title": "$:/core/images/refresh-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"
        },
        "$:/core/images/right-arrow": {
            "title": "$:/core/images/right-arrow",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"
        },
        "$:/core/images/rotate-left": {
            "title": "$:/core/images/rotate-left",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"
        },
        "$:/core/images/save-button": {
            "title": "$:/core/images/save-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"
        },
        "$:/core/images/size": {
            "title": "$:/core/images/size",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"
        },
        "$:/core/images/spiral": {
            "title": "$:/core/images/spiral",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"
        },
        "$:/core/images/stamp": {
            "title": "$:/core/images/stamp",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"
        },
        "$:/core/images/star-filled": {
            "title": "$:/core/images/star-filled",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"
        },
        "$:/core/images/storyview-classic": {
            "title": "$:/core/images/storyview-classic",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
        },
        "$:/core/images/storyview-pop": {
            "title": "$:/core/images/storyview-pop",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
        },
        "$:/core/images/storyview-zoomin": {
            "title": "$:/core/images/storyview-zoomin",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"
        },
        "$:/core/images/strikethrough": {
            "title": "$:/core/images/strikethrough",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"
        },
        "$:/core/images/subscript": {
            "title": "$:/core/images/subscript",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
        },
        "$:/core/images/superscript": {
            "title": "$:/core/images/superscript",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
        },
        "$:/core/images/tag-button": {
            "title": "$:/core/images/tag-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"
        },
        "$:/core/images/theme-button": {
            "title": "$:/core/images/theme-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"
        },
        "$:/core/images/timestamp-off": {
            "title": "$:/core/images/timestamp-off",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"
        },
        "$:/core/images/timestamp-on": {
            "title": "$:/core/images/timestamp-on",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"
        },
        "$:/core/images/tip": {
            "title": "$:/core/images/tip",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"
        },
        "$:/core/images/transcludify": {
            "title": "$:/core/images/transcludify",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"
        },
        "$:/core/images/twitter": {
            "title": "$:/core/images/twitter",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"
        },
        "$:/core/images/underline": {
            "title": "$:/core/images/underline",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"
        },
        "$:/core/images/unfold-all-button": {
            "title": "$:/core/images/unfold-all-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
        },
        "$:/core/images/unfold-button": {
            "title": "$:/core/images/unfold-button",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
        },
        "$:/core/images/unlocked-padlock": {
            "title": "$:/core/images/unlocked-padlock",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
        },
        "$:/core/images/up-arrow": {
            "title": "$:/core/images/up-arrow",
            "created": "20150316000544368",
            "modified": "20150316000831867",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"
        },
        "$:/core/images/video": {
            "title": "$:/core/images/video",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"
        },
        "$:/core/images/warning": {
            "title": "$:/core/images/warning",
            "tags": "$:/tags/Image",
            "text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"
        },
        "$:/language/Buttons/AdvancedSearch/Caption": {
            "title": "$:/language/Buttons/AdvancedSearch/Caption",
            "text": "advanced search"
        },
        "$:/language/Buttons/AdvancedSearch/Hint": {
            "title": "$:/language/Buttons/AdvancedSearch/Hint",
            "text": "Advanced search"
        },
        "$:/language/Buttons/Cancel/Caption": {
            "title": "$:/language/Buttons/Cancel/Caption",
            "text": "cancel"
        },
        "$:/language/Buttons/Cancel/Hint": {
            "title": "$:/language/Buttons/Cancel/Hint",
            "text": "Discard changes to this tiddler"
        },
        "$:/language/Buttons/Clone/Caption": {
            "title": "$:/language/Buttons/Clone/Caption",
            "text": "clone"
        },
        "$:/language/Buttons/Clone/Hint": {
            "title": "$:/language/Buttons/Clone/Hint",
            "text": "Clone this tiddler"
        },
        "$:/language/Buttons/Close/Caption": {
            "title": "$:/language/Buttons/Close/Caption",
            "text": "close"
        },
        "$:/language/Buttons/Close/Hint": {
            "title": "$:/language/Buttons/Close/Hint",
            "text": "Close this tiddler"
        },
        "$:/language/Buttons/CloseAll/Caption": {
            "title": "$:/language/Buttons/CloseAll/Caption",
            "text": "close all"
        },
        "$:/language/Buttons/CloseAll/Hint": {
            "title": "$:/language/Buttons/CloseAll/Hint",
            "text": "Close all tiddlers"
        },
        "$:/language/Buttons/CloseOthers/Caption": {
            "title": "$:/language/Buttons/CloseOthers/Caption",
            "text": "close others"
        },
        "$:/language/Buttons/CloseOthers/Hint": {
            "title": "$:/language/Buttons/CloseOthers/Hint",
            "text": "Close other tiddlers"
        },
        "$:/language/Buttons/ControlPanel/Caption": {
            "title": "$:/language/Buttons/ControlPanel/Caption",
            "text": "control panel"
        },
        "$:/language/Buttons/ControlPanel/Hint": {
            "title": "$:/language/Buttons/ControlPanel/Hint",
            "text": "Open control panel"
        },
        "$:/language/Buttons/CopyToClipboard/Caption": {
            "title": "$:/language/Buttons/CopyToClipboard/Caption",
            "text": "copy to clipboard"
        },
        "$:/language/Buttons/CopyToClipboard/Hint": {
            "title": "$:/language/Buttons/CopyToClipboard/Hint",
            "text": "Copy this text to the clipboard"
        },
        "$:/language/Buttons/Delete/Caption": {
            "title": "$:/language/Buttons/Delete/Caption",
            "text": "delete"
        },
        "$:/language/Buttons/Delete/Hint": {
            "title": "$:/language/Buttons/Delete/Hint",
            "text": "Delete this tiddler"
        },
        "$:/language/Buttons/Edit/Caption": {
            "title": "$:/language/Buttons/Edit/Caption",
            "text": "edit"
        },
        "$:/language/Buttons/Edit/Hint": {
            "title": "$:/language/Buttons/Edit/Hint",
            "text": "Edit this tiddler"
        },
        "$:/language/Buttons/Encryption/Caption": {
            "title": "$:/language/Buttons/Encryption/Caption",
            "text": "encryption"
        },
        "$:/language/Buttons/Encryption/Hint": {
            "title": "$:/language/Buttons/Encryption/Hint",
            "text": "Set or clear a password for saving this wiki"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
            "text": "clear password"
        },
        "$:/language/Buttons/Encryption/ClearPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
            "text": "Clear the password and save this wiki without encryption"
        },
        "$:/language/Buttons/Encryption/SetPassword/Caption": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Caption",
            "text": "set password"
        },
        "$:/language/Buttons/Encryption/SetPassword/Hint": {
            "title": "$:/language/Buttons/Encryption/SetPassword/Hint",
            "text": "Set a password for saving this wiki with encryption"
        },
        "$:/language/Buttons/ExportPage/Caption": {
            "title": "$:/language/Buttons/ExportPage/Caption",
            "text": "export all"
        },
        "$:/language/Buttons/ExportPage/Hint": {
            "title": "$:/language/Buttons/ExportPage/Hint",
            "text": "Export all tiddlers"
        },
        "$:/language/Buttons/ExportTiddler/Caption": {
            "title": "$:/language/Buttons/ExportTiddler/Caption",
            "text": "export tiddler"
        },
        "$:/language/Buttons/ExportTiddler/Hint": {
            "title": "$:/language/Buttons/ExportTiddler/Hint",
            "text": "Export tiddler"
        },
        "$:/language/Buttons/ExportTiddlers/Caption": {
            "title": "$:/language/Buttons/ExportTiddlers/Caption",
            "text": "export tiddlers"
        },
        "$:/language/Buttons/ExportTiddlers/Hint": {
            "title": "$:/language/Buttons/ExportTiddlers/Hint",
            "text": "Export tiddlers"
        },
        "$:/language/Buttons/SidebarSearch/Hint": {
            "title": "$:/language/Buttons/SidebarSearch/Hint",
            "text": "Select the sidebar search field"
        },
        "$:/language/Buttons/Fold/Caption": {
            "title": "$:/language/Buttons/Fold/Caption",
            "text": "fold tiddler"
        },
        "$:/language/Buttons/Fold/Hint": {
            "title": "$:/language/Buttons/Fold/Hint",
            "text": "Fold the body of this tiddler"
        },
        "$:/language/Buttons/Fold/FoldBar/Caption": {
            "title": "$:/language/Buttons/Fold/FoldBar/Caption",
            "text": "fold-bar"
        },
        "$:/language/Buttons/Fold/FoldBar/Hint": {
            "title": "$:/language/Buttons/Fold/FoldBar/Hint",
            "text": "Optional bars to fold and unfold tiddlers"
        },
        "$:/language/Buttons/Unfold/Caption": {
            "title": "$:/language/Buttons/Unfold/Caption",
            "text": "unfold tiddler"
        },
        "$:/language/Buttons/Unfold/Hint": {
            "title": "$:/language/Buttons/Unfold/Hint",
            "text": "Unfold the body of this tiddler"
        },
        "$:/language/Buttons/FoldOthers/Caption": {
            "title": "$:/language/Buttons/FoldOthers/Caption",
            "text": "fold other tiddlers"
        },
        "$:/language/Buttons/FoldOthers/Hint": {
            "title": "$:/language/Buttons/FoldOthers/Hint",
            "text": "Fold the bodies of other opened tiddlers"
        },
        "$:/language/Buttons/FoldAll/Caption": {
            "title": "$:/language/Buttons/FoldAll/Caption",
            "text": "fold all tiddlers"
        },
        "$:/language/Buttons/FoldAll/Hint": {
            "title": "$:/language/Buttons/FoldAll/Hint",
            "text": "Fold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Caption": {
            "title": "$:/language/Buttons/UnfoldAll/Caption",
            "text": "unfold all tiddlers"
        },
        "$:/language/Buttons/UnfoldAll/Hint": {
            "title": "$:/language/Buttons/UnfoldAll/Hint",
            "text": "Unfold the bodies of all opened tiddlers"
        },
        "$:/language/Buttons/FullScreen/Caption": {
            "title": "$:/language/Buttons/FullScreen/Caption",
            "text": "full-screen"
        },
        "$:/language/Buttons/FullScreen/Hint": {
            "title": "$:/language/Buttons/FullScreen/Hint",
            "text": "Enter or leave full-screen mode"
        },
        "$:/language/Buttons/Help/Caption": {
            "title": "$:/language/Buttons/Help/Caption",
            "text": "help"
        },
        "$:/language/Buttons/Help/Hint": {
            "title": "$:/language/Buttons/Help/Hint",
            "text": "Show help panel"
        },
        "$:/language/Buttons/Import/Caption": {
            "title": "$:/language/Buttons/Import/Caption",
            "text": "import"
        },
        "$:/language/Buttons/Import/Hint": {
            "title": "$:/language/Buttons/Import/Hint",
            "text": "Import many types of file including text, image, TiddlyWiki or JSON"
        },
        "$:/language/Buttons/Info/Caption": {
            "title": "$:/language/Buttons/Info/Caption",
            "text": "info"
        },
        "$:/language/Buttons/Info/Hint": {
            "title": "$:/language/Buttons/Info/Hint",
            "text": "Show information for this tiddler"
        },
        "$:/language/Buttons/Home/Caption": {
            "title": "$:/language/Buttons/Home/Caption",
            "text": "home"
        },
        "$:/language/Buttons/Home/Hint": {
            "title": "$:/language/Buttons/Home/Hint",
            "text": "Open the default tiddlers"
        },
        "$:/language/Buttons/Language/Caption": {
            "title": "$:/language/Buttons/Language/Caption",
            "text": "language"
        },
        "$:/language/Buttons/Language/Hint": {
            "title": "$:/language/Buttons/Language/Hint",
            "text": "Choose the user interface language"
        },
        "$:/language/Buttons/Manager/Caption": {
            "title": "$:/language/Buttons/Manager/Caption",
            "text": "tiddler manager"
        },
        "$:/language/Buttons/Manager/Hint": {
            "title": "$:/language/Buttons/Manager/Hint",
            "text": "Open tiddler manager"
        },
        "$:/language/Buttons/More/Caption": {
            "title": "$:/language/Buttons/More/Caption",
            "text": "more"
        },
        "$:/language/Buttons/More/Hint": {
            "title": "$:/language/Buttons/More/Hint",
            "text": "More actions"
        },
        "$:/language/Buttons/NewHere/Caption": {
            "title": "$:/language/Buttons/NewHere/Caption",
            "text": "new here"
        },
        "$:/language/Buttons/NewHere/Hint": {
            "title": "$:/language/Buttons/NewHere/Hint",
            "text": "Create a new tiddler tagged with this one"
        },
        "$:/language/Buttons/NewJournal/Caption": {
            "title": "$:/language/Buttons/NewJournal/Caption",
            "text": "new journal"
        },
        "$:/language/Buttons/NewJournal/Hint": {
            "title": "$:/language/Buttons/NewJournal/Hint",
            "text": "Create a new journal tiddler"
        },
        "$:/language/Buttons/NewJournalHere/Caption": {
            "title": "$:/language/Buttons/NewJournalHere/Caption",
            "text": "new journal here"
        },
        "$:/language/Buttons/NewJournalHere/Hint": {
            "title": "$:/language/Buttons/NewJournalHere/Hint",
            "text": "Create a new journal tiddler tagged with this one"
        },
        "$:/language/Buttons/NewImage/Caption": {
            "title": "$:/language/Buttons/NewImage/Caption",
            "text": "new image"
        },
        "$:/language/Buttons/NewImage/Hint": {
            "title": "$:/language/Buttons/NewImage/Hint",
            "text": "Create a new image tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Caption": {
            "title": "$:/language/Buttons/NewMarkdown/Caption",
            "text": "new Markdown tiddler"
        },
        "$:/language/Buttons/NewMarkdown/Hint": {
            "title": "$:/language/Buttons/NewMarkdown/Hint",
            "text": "Create a new Markdown tiddler"
        },
        "$:/language/Buttons/NewTiddler/Caption": {
            "title": "$:/language/Buttons/NewTiddler/Caption",
            "text": "new tiddler"
        },
        "$:/language/Buttons/NewTiddler/Hint": {
            "title": "$:/language/Buttons/NewTiddler/Hint",
            "text": "Create a new tiddler"
        },
        "$:/language/Buttons/OpenWindow/Caption": {
            "title": "$:/language/Buttons/OpenWindow/Caption",
            "text": "open in new window"
        },
        "$:/language/Buttons/OpenWindow/Hint": {
            "title": "$:/language/Buttons/OpenWindow/Hint",
            "text": "Open tiddler in new window"
        },
        "$:/language/Buttons/Palette/Caption": {
            "title": "$:/language/Buttons/Palette/Caption",
            "text": "palette"
        },
        "$:/language/Buttons/Palette/Hint": {
            "title": "$:/language/Buttons/Palette/Hint",
            "text": "Choose the colour palette"
        },
        "$:/language/Buttons/Permalink/Caption": {
            "title": "$:/language/Buttons/Permalink/Caption",
            "text": "permalink"
        },
        "$:/language/Buttons/Permalink/Hint": {
            "title": "$:/language/Buttons/Permalink/Hint",
            "text": "Set browser address bar to a direct link to this tiddler"
        },
        "$:/language/Buttons/Permaview/Caption": {
            "title": "$:/language/Buttons/Permaview/Caption",
            "text": "permaview"
        },
        "$:/language/Buttons/Permaview/Hint": {
            "title": "$:/language/Buttons/Permaview/Hint",
            "text": "Set browser address bar to a direct link to all the tiddlers in this story"
        },
        "$:/language/Buttons/Print/Caption": {
            "title": "$:/language/Buttons/Print/Caption",
            "text": "print page"
        },
        "$:/language/Buttons/Print/Hint": {
            "title": "$:/language/Buttons/Print/Hint",
            "text": "Print the current page"
        },
        "$:/language/Buttons/Refresh/Caption": {
            "title": "$:/language/Buttons/Refresh/Caption",
            "text": "refresh"
        },
        "$:/language/Buttons/Refresh/Hint": {
            "title": "$:/language/Buttons/Refresh/Hint",
            "text": "Perform a full refresh of the wiki"
        },
        "$:/language/Buttons/Save/Caption": {
            "title": "$:/language/Buttons/Save/Caption",
            "text": "ok"
        },
        "$:/language/Buttons/Save/Hint": {
            "title": "$:/language/Buttons/Save/Hint",
            "text": "Confirm changes to this tiddler"
        },
        "$:/language/Buttons/SaveWiki/Caption": {
            "title": "$:/language/Buttons/SaveWiki/Caption",
            "text": "save changes"
        },
        "$:/language/Buttons/SaveWiki/Hint": {
            "title": "$:/language/Buttons/SaveWiki/Hint",
            "text": "Save changes"
        },
        "$:/language/Buttons/StoryView/Caption": {
            "title": "$:/language/Buttons/StoryView/Caption",
            "text": "storyview"
        },
        "$:/language/Buttons/StoryView/Hint": {
            "title": "$:/language/Buttons/StoryView/Hint",
            "text": "Choose the story visualisation"
        },
        "$:/language/Buttons/HideSideBar/Caption": {
            "title": "$:/language/Buttons/HideSideBar/Caption",
            "text": "hide sidebar"
        },
        "$:/language/Buttons/HideSideBar/Hint": {
            "title": "$:/language/Buttons/HideSideBar/Hint",
            "text": "Hide sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Caption": {
            "title": "$:/language/Buttons/ShowSideBar/Caption",
            "text": "show sidebar"
        },
        "$:/language/Buttons/ShowSideBar/Hint": {
            "title": "$:/language/Buttons/ShowSideBar/Hint",
            "text": "Show sidebar"
        },
        "$:/language/Buttons/TagManager/Caption": {
            "title": "$:/language/Buttons/TagManager/Caption",
            "text": "tag manager"
        },
        "$:/language/Buttons/TagManager/Hint": {
            "title": "$:/language/Buttons/TagManager/Hint",
            "text": "Open tag manager"
        },
        "$:/language/Buttons/Timestamp/Caption": {
            "title": "$:/language/Buttons/Timestamp/Caption",
            "text": "timestamps"
        },
        "$:/language/Buttons/Timestamp/Hint": {
            "title": "$:/language/Buttons/Timestamp/Hint",
            "text": "Choose whether modifications update timestamps"
        },
        "$:/language/Buttons/Timestamp/On/Caption": {
            "title": "$:/language/Buttons/Timestamp/On/Caption",
            "text": "timestamps are on"
        },
        "$:/language/Buttons/Timestamp/On/Hint": {
            "title": "$:/language/Buttons/Timestamp/On/Hint",
            "text": "Update timestamps when tiddlers are modified"
        },
        "$:/language/Buttons/Timestamp/Off/Caption": {
            "title": "$:/language/Buttons/Timestamp/Off/Caption",
            "text": "timestamps are off"
        },
        "$:/language/Buttons/Timestamp/Off/Hint": {
            "title": "$:/language/Buttons/Timestamp/Off/Hint",
            "text": "Don't update timestamps when tiddlers are modified"
        },
        "$:/language/Buttons/Theme/Caption": {
            "title": "$:/language/Buttons/Theme/Caption",
            "text": "theme"
        },
        "$:/language/Buttons/Theme/Hint": {
            "title": "$:/language/Buttons/Theme/Hint",
            "text": "Choose the display theme"
        },
        "$:/language/Buttons/Bold/Caption": {
            "title": "$:/language/Buttons/Bold/Caption",
            "text": "bold"
        },
        "$:/language/Buttons/Bold/Hint": {
            "title": "$:/language/Buttons/Bold/Hint",
            "text": "Apply bold formatting to selection"
        },
        "$:/language/Buttons/Clear/Caption": {
            "title": "$:/language/Buttons/Clear/Caption",
            "text": "clear"
        },
        "$:/language/Buttons/Clear/Hint": {
            "title": "$:/language/Buttons/Clear/Hint",
            "text": "Clear image to solid colour"
        },
        "$:/language/Buttons/EditorHeight/Caption": {
            "title": "$:/language/Buttons/EditorHeight/Caption",
            "text": "editor height"
        },
        "$:/language/Buttons/EditorHeight/Caption/Auto": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Auto",
            "text": "Automatically adjust height to fit content"
        },
        "$:/language/Buttons/EditorHeight/Caption/Fixed": {
            "title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
            "text": "Fixed height:"
        },
        "$:/language/Buttons/EditorHeight/Hint": {
            "title": "$:/language/Buttons/EditorHeight/Hint",
            "text": "Choose the height of the text editor"
        },
        "$:/language/Buttons/Excise/Caption": {
            "title": "$:/language/Buttons/Excise/Caption",
            "text": "excise"
        },
        "$:/language/Buttons/Excise/Caption/Excise": {
            "title": "$:/language/Buttons/Excise/Caption/Excise",
            "text": "Perform excision"
        },
        "$:/language/Buttons/Excise/Caption/MacroName": {
            "title": "$:/language/Buttons/Excise/Caption/MacroName",
            "text": "Macro name:"
        },
        "$:/language/Buttons/Excise/Caption/NewTitle": {
            "title": "$:/language/Buttons/Excise/Caption/NewTitle",
            "text": "Title of new tiddler:"
        },
        "$:/language/Buttons/Excise/Caption/Replace": {
            "title": "$:/language/Buttons/Excise/Caption/Replace",
            "text": "Replace excised text with:"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Macro": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
            "text": "macro"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Link": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Link",
            "text": "link"
        },
        "$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
            "title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
            "text": "transclusion"
        },
        "$:/language/Buttons/Excise/Caption/Tag": {
            "title": "$:/language/Buttons/Excise/Caption/Tag",
            "text": "Tag new tiddler with the title of this tiddler"
        },
        "$:/language/Buttons/Excise/Caption/TiddlerExists": {
            "title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
            "text": "Warning: tiddler already exists"
        },
        "$:/language/Buttons/Excise/Hint": {
            "title": "$:/language/Buttons/Excise/Hint",
            "text": "Excise the selected text into a new tiddler"
        },
        "$:/language/Buttons/Heading1/Caption": {
            "title": "$:/language/Buttons/Heading1/Caption",
            "text": "heading 1"
        },
        "$:/language/Buttons/Heading1/Hint": {
            "title": "$:/language/Buttons/Heading1/Hint",
            "text": "Apply heading level 1 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading2/Caption": {
            "title": "$:/language/Buttons/Heading2/Caption",
            "text": "heading 2"
        },
        "$:/language/Buttons/Heading2/Hint": {
            "title": "$:/language/Buttons/Heading2/Hint",
            "text": "Apply heading level 2 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading3/Caption": {
            "title": "$:/language/Buttons/Heading3/Caption",
            "text": "heading 3"
        },
        "$:/language/Buttons/Heading3/Hint": {
            "title": "$:/language/Buttons/Heading3/Hint",
            "text": "Apply heading level 3 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading4/Caption": {
            "title": "$:/language/Buttons/Heading4/Caption",
            "text": "heading 4"
        },
        "$:/language/Buttons/Heading4/Hint": {
            "title": "$:/language/Buttons/Heading4/Hint",
            "text": "Apply heading level 4 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading5/Caption": {
            "title": "$:/language/Buttons/Heading5/Caption",
            "text": "heading 5"
        },
        "$:/language/Buttons/Heading5/Hint": {
            "title": "$:/language/Buttons/Heading5/Hint",
            "text": "Apply heading level 5 formatting to lines containing selection"
        },
        "$:/language/Buttons/Heading6/Caption": {
            "title": "$:/language/Buttons/Heading6/Caption",
            "text": "heading 6"
        },
        "$:/language/Buttons/Heading6/Hint": {
            "title": "$:/language/Buttons/Heading6/Hint",
            "text": "Apply heading level 6 formatting to lines containing selection"
        },
        "$:/language/Buttons/Italic/Caption": {
            "title": "$:/language/Buttons/Italic/Caption",
            "text": "italic"
        },
        "$:/language/Buttons/Italic/Hint": {
            "title": "$:/language/Buttons/Italic/Hint",
            "text": "Apply italic formatting to selection"
        },
        "$:/language/Buttons/LineWidth/Caption": {
            "title": "$:/language/Buttons/LineWidth/Caption",
            "text": "line width"
        },
        "$:/language/Buttons/LineWidth/Hint": {
            "title": "$:/language/Buttons/LineWidth/Hint",
            "text": "Set line width for painting"
        },
        "$:/language/Buttons/Link/Caption": {
            "title": "$:/language/Buttons/Link/Caption",
            "text": "link"
        },
        "$:/language/Buttons/Link/Hint": {
            "title": "$:/language/Buttons/Link/Hint",
            "text": "Create wikitext link"
        },
        "$:/language/Buttons/Linkify/Caption": {
            "title": "$:/language/Buttons/Linkify/Caption",
            "text": "wikilink"
        },
        "$:/language/Buttons/Linkify/Hint": {
            "title": "$:/language/Buttons/Linkify/Hint",
            "text": "Wrap selection in square brackets"
        },
        "$:/language/Buttons/ListBullet/Caption": {
            "title": "$:/language/Buttons/ListBullet/Caption",
            "text": "bulleted list"
        },
        "$:/language/Buttons/ListBullet/Hint": {
            "title": "$:/language/Buttons/ListBullet/Hint",
            "text": "Apply bulleted list formatting to lines containing selection"
        },
        "$:/language/Buttons/ListNumber/Caption": {
            "title": "$:/language/Buttons/ListNumber/Caption",
            "text": "numbered list"
        },
        "$:/language/Buttons/ListNumber/Hint": {
            "title": "$:/language/Buttons/ListNumber/Hint",
            "text": "Apply numbered list formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoBlock/Caption": {
            "title": "$:/language/Buttons/MonoBlock/Caption",
            "text": "monospaced block"
        },
        "$:/language/Buttons/MonoBlock/Hint": {
            "title": "$:/language/Buttons/MonoBlock/Hint",
            "text": "Apply monospaced block formatting to lines containing selection"
        },
        "$:/language/Buttons/MonoLine/Caption": {
            "title": "$:/language/Buttons/MonoLine/Caption",
            "text": "monospaced"
        },
        "$:/language/Buttons/MonoLine/Hint": {
            "title": "$:/language/Buttons/MonoLine/Hint",
            "text": "Apply monospaced character formatting to selection"
        },
        "$:/language/Buttons/Opacity/Caption": {
            "title": "$:/language/Buttons/Opacity/Caption",
            "text": "opacity"
        },
        "$:/language/Buttons/Opacity/Hint": {
            "title": "$:/language/Buttons/Opacity/Hint",
            "text": "Set painting opacity"
        },
        "$:/language/Buttons/Paint/Caption": {
            "title": "$:/language/Buttons/Paint/Caption",
            "text": "paint colour"
        },
        "$:/language/Buttons/Paint/Hint": {
            "title": "$:/language/Buttons/Paint/Hint",
            "text": "Set painting colour"
        },
        "$:/language/Buttons/Picture/Caption": {
            "title": "$:/language/Buttons/Picture/Caption",
            "text": "picture"
        },
        "$:/language/Buttons/Picture/Hint": {
            "title": "$:/language/Buttons/Picture/Hint",
            "text": "Insert picture"
        },
        "$:/language/Buttons/Preview/Caption": {
            "title": "$:/language/Buttons/Preview/Caption",
            "text": "preview"
        },
        "$:/language/Buttons/Preview/Hint": {
            "title": "$:/language/Buttons/Preview/Hint",
            "text": "Show preview pane"
        },
        "$:/language/Buttons/PreviewType/Caption": {
            "title": "$:/language/Buttons/PreviewType/Caption",
            "text": "preview type"
        },
        "$:/language/Buttons/PreviewType/Hint": {
            "title": "$:/language/Buttons/PreviewType/Hint",
            "text": "Choose preview type"
        },
        "$:/language/Buttons/Quote/Caption": {
            "title": "$:/language/Buttons/Quote/Caption",
            "text": "quote"
        },
        "$:/language/Buttons/Quote/Hint": {
            "title": "$:/language/Buttons/Quote/Hint",
            "text": "Apply quoted text formatting to lines containing selection"
        },
        "$:/language/Buttons/RotateLeft/Caption": {
            "title": "$:/language/Buttons/RotateLeft/Caption",
            "text": "rotate left"
        },
        "$:/language/Buttons/RotateLeft/Hint": {
            "title": "$:/language/Buttons/RotateLeft/Hint",
            "text": "Rotate image left by 90 degrees"
        },
        "$:/language/Buttons/Size/Caption": {
            "title": "$:/language/Buttons/Size/Caption",
            "text": "image size"
        },
        "$:/language/Buttons/Size/Caption/Height": {
            "title": "$:/language/Buttons/Size/Caption/Height",
            "text": "Height:"
        },
        "$:/language/Buttons/Size/Caption/Resize": {
            "title": "$:/language/Buttons/Size/Caption/Resize",
            "text": "Resize image"
        },
        "$:/language/Buttons/Size/Caption/Width": {
            "title": "$:/language/Buttons/Size/Caption/Width",
            "text": "Width:"
        },
        "$:/language/Buttons/Size/Hint": {
            "title": "$:/language/Buttons/Size/Hint",
            "text": "Set image size"
        },
        "$:/language/Buttons/Stamp/Caption": {
            "title": "$:/language/Buttons/Stamp/Caption",
            "text": "stamp"
        },
        "$:/language/Buttons/Stamp/Caption/New": {
            "title": "$:/language/Buttons/Stamp/Caption/New",
            "text": "Add your own"
        },
        "$:/language/Buttons/Stamp/Hint": {
            "title": "$:/language/Buttons/Stamp/Hint",
            "text": "Insert a preconfigured snippet of text"
        },
        "$:/language/Buttons/Stamp/New/Title": {
            "title": "$:/language/Buttons/Stamp/New/Title",
            "text": "Name as shown in menu"
        },
        "$:/language/Buttons/Stamp/New/Text": {
            "title": "$:/language/Buttons/Stamp/New/Text",
            "text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
        },
        "$:/language/Buttons/Strikethrough/Caption": {
            "title": "$:/language/Buttons/Strikethrough/Caption",
            "text": "strikethrough"
        },
        "$:/language/Buttons/Strikethrough/Hint": {
            "title": "$:/language/Buttons/Strikethrough/Hint",
            "text": "Apply strikethrough formatting to selection"
        },
        "$:/language/Buttons/Subscript/Caption": {
            "title": "$:/language/Buttons/Subscript/Caption",
            "text": "subscript"
        },
        "$:/language/Buttons/Subscript/Hint": {
            "title": "$:/language/Buttons/Subscript/Hint",
            "text": "Apply subscript formatting to selection"
        },
        "$:/language/Buttons/Superscript/Caption": {
            "title": "$:/language/Buttons/Superscript/Caption",
            "text": "superscript"
        },
        "$:/language/Buttons/Superscript/Hint": {
            "title": "$:/language/Buttons/Superscript/Hint",
            "text": "Apply superscript formatting to selection"
        },
        "$:/language/Buttons/ToggleSidebar/Hint": {
            "title": "$:/language/Buttons/ToggleSidebar/Hint",
            "text": "Toggle the sidebar visibility"
        },
        "$:/language/Buttons/Transcludify/Caption": {
            "title": "$:/language/Buttons/Transcludify/Caption",
            "text": "transclusion"
        },
        "$:/language/Buttons/Transcludify/Hint": {
            "title": "$:/language/Buttons/Transcludify/Hint",
            "text": "Wrap selection in curly brackets"
        },
        "$:/language/Buttons/Underline/Caption": {
            "title": "$:/language/Buttons/Underline/Caption",
            "text": "underline"
        },
        "$:/language/Buttons/Underline/Hint": {
            "title": "$:/language/Buttons/Underline/Hint",
            "text": "Apply underline formatting to selection"
        },
        "$:/language/ControlPanel/Advanced/Caption": {
            "title": "$:/language/ControlPanel/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/ControlPanel/Advanced/Hint": {
            "title": "$:/language/ControlPanel/Advanced/Hint",
            "text": "Internal information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/Appearance/Caption": {
            "title": "$:/language/ControlPanel/Appearance/Caption",
            "text": "Appearance"
        },
        "$:/language/ControlPanel/Appearance/Hint": {
            "title": "$:/language/ControlPanel/Appearance/Hint",
            "text": "Ways to customise the appearance of your TiddlyWiki."
        },
        "$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
            "text": "Animation duration"
        },
        "$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
            "title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
            "text": "Default focus field for new tiddlers"
        },
        "$:/language/ControlPanel/Basics/Caption": {
            "title": "$:/language/ControlPanel/Basics/Caption",
            "text": "Basics"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
            "text": "Use &#91;&#91;double square brackets&#93;&#93; for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
            "text": "Default tiddlers"
        },
        "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
            "title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
            "text": "Choose which tiddlers are displayed at startup"
        },
        "$:/language/ControlPanel/Basics/Language/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Language/Prompt",
            "text": "Hello! Current language:"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
            "text": "Title of new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
            "text": "Text for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
            "text": "Tags for new journal tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
            "text": "Title of new tiddlers"
        },
        "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
            "text": "Tags for new tiddlers"
        },
        "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
            "text": "Number of overridden shadow tiddlers"
        },
        "$:/language/ControlPanel/Basics/RemoveTags": {
            "title": "$:/language/ControlPanel/Basics/RemoveTags",
            "text": "Update to current format"
        },
        "$:/language/ControlPanel/Basics/RemoveTags/Hint": {
            "title": "$:/language/ControlPanel/Basics/RemoveTags/Hint",
            "text": "Update the tags configuration to the latest format"
        },
        "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
            "text": "Number of shadow tiddlers"
        },
        "$:/language/ControlPanel/Basics/Subtitle/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
            "text": "Subtitle"
        },
        "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
            "text": "Number of system tiddlers"
        },
        "$:/language/ControlPanel/Basics/Tags/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tags/Prompt",
            "text": "Number of tags"
        },
        "$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
            "text": "Number of tiddlers"
        },
        "$:/language/ControlPanel/Basics/Title/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Title/Prompt",
            "text": "Title of this ~TiddlyWiki"
        },
        "$:/language/ControlPanel/Basics/Username/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Username/Prompt",
            "text": "Username for signing edits"
        },
        "$:/language/ControlPanel/Basics/Version/Prompt": {
            "title": "$:/language/ControlPanel/Basics/Version/Prompt",
            "text": "~TiddlyWiki version"
        },
        "$:/language/ControlPanel/EditorTypes/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Caption",
            "text": "Editor Types"
        },
        "$:/language/ControlPanel/EditorTypes/Editor/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
            "text": "Editor"
        },
        "$:/language/ControlPanel/EditorTypes/Hint": {
            "title": "$:/language/ControlPanel/EditorTypes/Hint",
            "text": "These tiddlers determine which editor is used to edit specific tiddler types."
        },
        "$:/language/ControlPanel/EditorTypes/Type/Caption": {
            "title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
            "text": "Type"
        },
        "$:/language/ControlPanel/Info/Caption": {
            "title": "$:/language/ControlPanel/Info/Caption",
            "text": "Info"
        },
        "$:/language/ControlPanel/Info/Hint": {
            "title": "$:/language/ControlPanel/Info/Hint",
            "text": "Information about this TiddlyWiki"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
            "text": "Type shortcut here"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
            "text": "add shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
            "text": "Keyboard Shortcuts"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
            "text": "Manage keyboard shortcut assignments"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
            "text": "No keyboard shortcuts assigned"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
            "text": "remove keyboard shortcut"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
            "text": "All platforms"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
            "text": "Macintosh platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
            "text": "Non-Macintosh platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
            "text": "Linux platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
            "text": "Non-Linux platforms only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
            "text": "Windows platform only"
        },
        "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
            "title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
            "text": "Non-Windows platforms only"
        },
        "$:/language/ControlPanel/LayoutSwitcher/Caption": {
            "title": "$:/language/ControlPanel/LayoutSwitcher/Caption",
            "text": "Layout"
        },
        "$:/language/ControlPanel/LoadedModules/Caption": {
            "title": "$:/language/ControlPanel/LoadedModules/Caption",
            "text": "Loaded Modules"
        },
        "$:/language/ControlPanel/LoadedModules/Hint": {
            "title": "$:/language/ControlPanel/LoadedModules/Hint",
            "text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
        },
        "$:/language/ControlPanel/Palette/Caption": {
            "title": "$:/language/ControlPanel/Palette/Caption",
            "text": "Palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
            "text": "clone"
        },
        "$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
            "text": "It is recommended that you clone this shadow palette before editing it"
        },
        "$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
            "title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
            "text": "delete this entry from the current palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
            "title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
            "text": "Show color names that are not part of the current palette"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
            "text": "This shadow palette has been modified"
        },
        "$:/language/ControlPanel/Palette/Editor/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Editor/Prompt",
            "text": "Editing"
        },
        "$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
            "title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
            "text": "reset"
        },
        "$:/language/ControlPanel/Palette/HideEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
            "text": "hide editor"
        },
        "$:/language/ControlPanel/Palette/Prompt": {
            "title": "$:/language/ControlPanel/Palette/Prompt",
            "text": "Current palette:"
        },
        "$:/language/ControlPanel/Palette/ShowEditor/Caption": {
            "title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
            "text": "show editor"
        },
        "$:/language/ControlPanel/Parsing/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Caption",
            "text": "Parsing"
        },
        "$:/language/ControlPanel/Parsing/Hint": {
            "title": "$:/language/ControlPanel/Parsing/Hint",
            "text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
        },
        "$:/language/ControlPanel/Parsing/Block/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Block/Caption",
            "text": "Block Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Inline/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Inline/Caption",
            "text": "Inline Parse Rules"
        },
        "$:/language/ControlPanel/Parsing/Pragma/Caption": {
            "title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
            "text": "Pragma Parse Rules"
        },
        "$:/language/ControlPanel/Plugins/Add/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Add/Caption",
            "text": "Get more plugins"
        },
        "$:/language/ControlPanel/Plugins/Add/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Add/Hint",
            "text": "Install plugins from the official library"
        },
        "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
            "text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
        },
        "$:/language/ControlPanel/Plugins/AlsoRequires": {
            "title": "$:/language/ControlPanel/Plugins/AlsoRequires",
            "text": "Also requires:"
        },
        "$:/language/ControlPanel/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Disable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Caption",
            "text": "disable"
        },
        "$:/language/ControlPanel/Plugins/Disable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Disable/Hint",
            "text": "Disable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Disabled/Status": {
            "title": "$:/language/ControlPanel/Plugins/Disabled/Status",
            "text": "(disabled)"
        },
        "$:/language/ControlPanel/Plugins/Downgrade/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
            "text": "downgrade"
        },
        "$:/language/ControlPanel/Plugins/Empty/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Empty/Hint",
            "text": "None"
        },
        "$:/language/ControlPanel/Plugins/Enable/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Caption",
            "text": "enable"
        },
        "$:/language/ControlPanel/Plugins/Enable/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Enable/Hint",
            "text": "Enable this plugin when reloading page"
        },
        "$:/language/ControlPanel/Plugins/Install/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Install/Caption",
            "text": "install"
        },
        "$:/language/ControlPanel/Plugins/Installed/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Installed/Hint",
            "text": "Currently installed plugins:"
        },
        "$:/language/ControlPanel/Plugins/Languages/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Caption",
            "text": "Languages"
        },
        "$:/language/ControlPanel/Plugins/Languages/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Languages/Hint",
            "text": "Language pack plugins"
        },
        "$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
            "text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
        },
        "$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
            "title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
            "text": "This plugin is not currently installed"
        },
        "$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
            "text": "open plugin library"
        },
        "$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
            "title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
            "text": "close plugin library"
        },
        "$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
            "title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
            "text": "(requires reload)"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Plugins/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
            "text": "Plugins"
        },
        "$:/language/ControlPanel/Plugins/Reinstall/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
            "text": "reinstall"
        },
        "$:/language/ControlPanel/Plugins/Themes/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Caption",
            "text": "Themes"
        },
        "$:/language/ControlPanel/Plugins/Themes/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Themes/Hint",
            "text": "Theme plugins"
        },
        "$:/language/ControlPanel/Plugins/Update/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Update/Caption",
            "text": "update"
        },
        "$:/language/ControlPanel/Plugins/Updates/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Updates/Caption",
            "text": "Updates"
        },
        "$:/language/ControlPanel/Plugins/Updates/Hint": {
            "title": "$:/language/ControlPanel/Plugins/Updates/Hint",
            "text": "Available updates to installed plugins"
        },
        "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
            "title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
            "text": "Update <<update-count>> plugins"
        },
        "$:/language/ControlPanel/Plugins/SubPluginPrompt": {
            "title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
            "text": "With <<count>> sub-plugins available"
        },
        "$:/language/ControlPanel/Saving/Caption": {
            "title": "$:/language/ControlPanel/Saving/Caption",
            "text": "Saving"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
            "text": "Permit automatic saving for the download saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
            "text": "Enable Autosave for Download Saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
            "text": "Download Saver"
        },
        "$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
            "title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
            "text": "These settings apply to the HTML5-compatible download saver"
        },
        "$:/language/ControlPanel/Saving/General/Caption": {
            "title": "$:/language/ControlPanel/Saving/General/Caption",
            "text": "General"
        },
        "$:/language/ControlPanel/Saving/General/Hint": {
            "title": "$:/language/ControlPanel/Saving/General/Hint",
            "text": "These settings apply to all the loaded savers"
        },
        "$:/language/ControlPanel/Saving/Hint": {
            "title": "$:/language/ControlPanel/Saving/Hint",
            "text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
        },
        "$:/language/ControlPanel/Saving/GitService/Branch": {
            "title": "$:/language/ControlPanel/Saving/GitService/Branch",
            "text": "Target branch for saving"
        },
        "$:/language/ControlPanel/Saving/GitService/CommitMessage": {
            "title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
            "text": "Saved by TiddlyWiki"
        },
        "$:/language/ControlPanel/Saving/GitService/Description": {
            "title": "$:/language/ControlPanel/Saving/GitService/Description",
            "text": "These settings are only used when saving to <<service-name>>"
        },
        "$:/language/ControlPanel/Saving/GitService/Filename": {
            "title": "$:/language/ControlPanel/Saving/GitService/Filename",
            "text": "Filename of target file (e.g. `index.html`)"
        },
        "$:/language/ControlPanel/Saving/GitService/Path": {
            "title": "$:/language/ControlPanel/Saving/GitService/Path",
            "text": "Path to target file (e.g. `/wiki/`)"
        },
        "$:/language/ControlPanel/Saving/GitService/Repo": {
            "title": "$:/language/ControlPanel/Saving/GitService/Repo",
            "text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
        },
        "$:/language/ControlPanel/Saving/GitService/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
            "text": "Server API URL"
        },
        "$:/language/ControlPanel/Saving/GitService/UserName": {
            "title": "$:/language/ControlPanel/Saving/GitService/UserName",
            "text": "Username"
        },
        "$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
            "text": "~GitHub Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
            "text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
        },
        "$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
            "text": "~GitLab Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
            "text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
        },
        "$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
            "title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
            "text": "Gitea Saver"
        },
        "$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
            "title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
            "text": "Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
            "text": "Advanced Settings"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
            "text": "Backup Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ControlPanel",
            "text": "~TiddlySpot Control Panel"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
            "text": "Backups"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
            "text": "~TiddlySpot Saver"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Description": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
            "text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
            "text": "Upload Filename"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
            "text": "~TiddlySpot"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
            "text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/Password": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
            "text": "Password"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ReadOnly",
            "text": "The ~TiddlySpot service is currently only available in read-only form. Please see http://tiddlyspot.com/ for the latest details. The ~TiddlySpot saver can still be used to save to compatible servers."
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
            "text": "Server URL"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
            "text": "Upload Directory"
        },
        "$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
            "title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
            "text": "Wiki Name"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Caption": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
            "text": "Autosave"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
            "text": "Do not save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
            "text": "Save changes automatically"
        },
        "$:/language/ControlPanel/Settings/AutoSave/Hint": {
            "title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
            "text": "Attempt to automatically save changes during editing when using a supporting saver"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Caption": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
            "text": "Camel Case Wiki Links"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Hint": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
            "text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/CamelCase/Description": {
            "title": "$:/language/ControlPanel/Settings/CamelCase/Description",
            "text": "Enable automatic ~CamelCase linking"
        },
        "$:/language/ControlPanel/Settings/Caption": {
            "title": "$:/language/ControlPanel/Settings/Caption",
            "text": "Settings"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
            "text": "Enable or disable the editor toolbar:"
        },
        "$:/language/ControlPanel/Settings/EditorToolbar/Description": {
            "title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
            "text": "Show editor toolbar"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
            "text": "Tiddler Info Panel Mode"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
            "text": "Control when the tiddler info panel closes:"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
            "text": "Tiddler info panel closes automatically"
        },
        "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
            "title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
            "text": "Tiddler info panel stays open until explicitly closed"
        },
        "$:/language/ControlPanel/Settings/Hint": {
            "title": "$:/language/ControlPanel/Settings/Hint",
            "text": "These settings let you customise the behaviour of TiddlyWiki."
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
            "text": "Navigation Address Bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
            "text": "Behaviour of the browser address bar when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
            "text": "Do not update the address bar"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
            "text": "Include the target tiddler"
        },
        "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
            "text": "Include the target tiddler and the current story sequence"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
            "text": "Navigation History"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
            "text": "Update browser history when navigating to a tiddler:"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
            "text": "Do not update history"
        },
        "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
            "text": "Update history"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
            "text": "Permalink/permaview Mode"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
            "text": "Choose how permalink/permaview is handled:"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
            "text": "Copy permalink/permaview URL to clipboard"
        },
        "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
            "title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
            "text": "Update address bar with permalink/permaview URL"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
            "text": "Performance Instrumentation"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
            "text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
        },
        "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
            "title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
            "text": "Enable performance instrumentation"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
            "text": "Toolbar Button Style"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
            "text": "Choose the style for toolbar buttons:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
            "text": "Borderless"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
            "text": "Boxed"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
            "text": "Rounded"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
            "text": "Toolbar Buttons"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
            "text": "Default toolbar button appearance:"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
            "text": "Include icon"
        },
        "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
            "title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
            "text": "Include text"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
            "text": "Default Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
            "text": "Specify which sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
            "text": "Default More Sidebar Tab"
        },
        "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
            "title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
            "text": "Specify which More sidebar tab is displayed by default"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
            "text": "Tiddler Opening Behaviour"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
            "text": "Navigation from //within// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
            "text": "Navigation from //outside// the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
            "text": "Open above the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
            "text": "Open below the current tiddler"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
            "text": "Open at the top of the story river"
        },
        "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
            "title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
            "text": "Open at the bottom of the story river"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
            "text": "Tiddler Titles"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
            "text": "Optionally display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
            "text": "Do not display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
            "title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
            "text": "Display tiddler titles as links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Caption": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
            "text": "Wiki Links"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Hint": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
            "text": "Choose whether to link to tiddlers that do not exist yet"
        },
        "$:/language/ControlPanel/Settings/MissingLinks/Description": {
            "title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
            "text": "Enable links to missing tiddlers"
        },
        "$:/language/ControlPanel/StoryView/Caption": {
            "title": "$:/language/ControlPanel/StoryView/Caption",
            "text": "Story View"
        },
        "$:/language/ControlPanel/StoryView/Prompt": {
            "title": "$:/language/ControlPanel/StoryView/Prompt",
            "text": "Current view:"
        },
        "$:/language/ControlPanel/Stylesheets/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Caption",
            "text": "Stylesheets"
        },
        "$:/language/ControlPanel/Stylesheets/Expand/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
            "text": "Expand All"
        },
        "$:/language/ControlPanel/Stylesheets/Hint": {
            "title": "$:/language/ControlPanel/Stylesheets/Hint",
            "text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
        },
        "$:/language/ControlPanel/Stylesheets/Restore/Caption": {
            "title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
            "text": "Restore"
        },
        "$:/language/ControlPanel/Theme/Caption": {
            "title": "$:/language/ControlPanel/Theme/Caption",
            "text": "Theme"
        },
        "$:/language/ControlPanel/Theme/Prompt": {
            "title": "$:/language/ControlPanel/Theme/Prompt",
            "text": "Current theme:"
        },
        "$:/language/ControlPanel/TiddlerFields/Caption": {
            "title": "$:/language/ControlPanel/TiddlerFields/Caption",
            "text": "Tiddler Fields"
        },
        "$:/language/ControlPanel/TiddlerFields/Hint": {
            "title": "$:/language/ControlPanel/TiddlerFields/Hint",
            "text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
        },
        "$:/language/ControlPanel/Toolbars/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/Caption",
            "text": "Toolbars"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
            "text": "Edit Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/Hint",
            "text": "Select which toolbar buttons are displayed"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
            "text": "Page Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/PageControls/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
            "text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
            "text": "Editor Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
            "text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
            "text": "View Toolbar"
        },
        "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
            "title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
            "text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
        },
        "$:/language/ControlPanel/Tools/Download/Full/Caption": {
            "title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
            "text": "Download full wiki"
        },
        "$:/language/Date/DaySuffix/1": {
            "title": "$:/language/Date/DaySuffix/1",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/2": {
            "title": "$:/language/Date/DaySuffix/2",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/3": {
            "title": "$:/language/Date/DaySuffix/3",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/4": {
            "title": "$:/language/Date/DaySuffix/4",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/5": {
            "title": "$:/language/Date/DaySuffix/5",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/6": {
            "title": "$:/language/Date/DaySuffix/6",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/7": {
            "title": "$:/language/Date/DaySuffix/7",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/8": {
            "title": "$:/language/Date/DaySuffix/8",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/9": {
            "title": "$:/language/Date/DaySuffix/9",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/10": {
            "title": "$:/language/Date/DaySuffix/10",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/11": {
            "title": "$:/language/Date/DaySuffix/11",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/12": {
            "title": "$:/language/Date/DaySuffix/12",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/13": {
            "title": "$:/language/Date/DaySuffix/13",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/14": {
            "title": "$:/language/Date/DaySuffix/14",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/15": {
            "title": "$:/language/Date/DaySuffix/15",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/16": {
            "title": "$:/language/Date/DaySuffix/16",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/17": {
            "title": "$:/language/Date/DaySuffix/17",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/18": {
            "title": "$:/language/Date/DaySuffix/18",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/19": {
            "title": "$:/language/Date/DaySuffix/19",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/20": {
            "title": "$:/language/Date/DaySuffix/20",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/21": {
            "title": "$:/language/Date/DaySuffix/21",
            "text": "st"
        },
        "$:/language/Date/DaySuffix/22": {
            "title": "$:/language/Date/DaySuffix/22",
            "text": "nd"
        },
        "$:/language/Date/DaySuffix/23": {
            "title": "$:/language/Date/DaySuffix/23",
            "text": "rd"
        },
        "$:/language/Date/DaySuffix/24": {
            "title": "$:/language/Date/DaySuffix/24",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/25": {
            "title": "$:/language/Date/DaySuffix/25",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/26": {
            "title": "$:/language/Date/DaySuffix/26",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/27": {
            "title": "$:/language/Date/DaySuffix/27",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/28": {
            "title": "$:/language/Date/DaySuffix/28",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/29": {
            "title": "$:/language/Date/DaySuffix/29",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/30": {
            "title": "$:/language/Date/DaySuffix/30",
            "text": "th"
        },
        "$:/language/Date/DaySuffix/31": {
            "title": "$:/language/Date/DaySuffix/31",
            "text": "st"
        },
        "$:/language/Date/Long/Day/0": {
            "title": "$:/language/Date/Long/Day/0",
            "text": "Sunday"
        },
        "$:/language/Date/Long/Day/1": {
            "title": "$:/language/Date/Long/Day/1",
            "text": "Monday"
        },
        "$:/language/Date/Long/Day/2": {
            "title": "$:/language/Date/Long/Day/2",
            "text": "Tuesday"
        },
        "$:/language/Date/Long/Day/3": {
            "title": "$:/language/Date/Long/Day/3",
            "text": "Wednesday"
        },
        "$:/language/Date/Long/Day/4": {
            "title": "$:/language/Date/Long/Day/4",
            "text": "Thursday"
        },
        "$:/language/Date/Long/Day/5": {
            "title": "$:/language/Date/Long/Day/5",
            "text": "Friday"
        },
        "$:/language/Date/Long/Day/6": {
            "title": "$:/language/Date/Long/Day/6",
            "text": "Saturday"
        },
        "$:/language/Date/Long/Month/1": {
            "title": "$:/language/Date/Long/Month/1",
            "text": "January"
        },
        "$:/language/Date/Long/Month/2": {
            "title": "$:/language/Date/Long/Month/2",
            "text": "February"
        },
        "$:/language/Date/Long/Month/3": {
            "title": "$:/language/Date/Long/Month/3",
            "text": "March"
        },
        "$:/language/Date/Long/Month/4": {
            "title": "$:/language/Date/Long/Month/4",
            "text": "April"
        },
        "$:/language/Date/Long/Month/5": {
            "title": "$:/language/Date/Long/Month/5",
            "text": "May"
        },
        "$:/language/Date/Long/Month/6": {
            "title": "$:/language/Date/Long/Month/6",
            "text": "June"
        },
        "$:/language/Date/Long/Month/7": {
            "title": "$:/language/Date/Long/Month/7",
            "text": "July"
        },
        "$:/language/Date/Long/Month/8": {
            "title": "$:/language/Date/Long/Month/8",
            "text": "August"
        },
        "$:/language/Date/Long/Month/9": {
            "title": "$:/language/Date/Long/Month/9",
            "text": "September"
        },
        "$:/language/Date/Long/Month/10": {
            "title": "$:/language/Date/Long/Month/10",
            "text": "October"
        },
        "$:/language/Date/Long/Month/11": {
            "title": "$:/language/Date/Long/Month/11",
            "text": "November"
        },
        "$:/language/Date/Long/Month/12": {
            "title": "$:/language/Date/Long/Month/12",
            "text": "December"
        },
        "$:/language/Date/Period/am": {
            "title": "$:/language/Date/Period/am",
            "text": "am"
        },
        "$:/language/Date/Period/pm": {
            "title": "$:/language/Date/Period/pm",
            "text": "pm"
        },
        "$:/language/Date/Short/Day/0": {
            "title": "$:/language/Date/Short/Day/0",
            "text": "Sun"
        },
        "$:/language/Date/Short/Day/1": {
            "title": "$:/language/Date/Short/Day/1",
            "text": "Mon"
        },
        "$:/language/Date/Short/Day/2": {
            "title": "$:/language/Date/Short/Day/2",
            "text": "Tue"
        },
        "$:/language/Date/Short/Day/3": {
            "title": "$:/language/Date/Short/Day/3",
            "text": "Wed"
        },
        "$:/language/Date/Short/Day/4": {
            "title": "$:/language/Date/Short/Day/4",
            "text": "Thu"
        },
        "$:/language/Date/Short/Day/5": {
            "title": "$:/language/Date/Short/Day/5",
            "text": "Fri"
        },
        "$:/language/Date/Short/Day/6": {
            "title": "$:/language/Date/Short/Day/6",
            "text": "Sat"
        },
        "$:/language/Date/Short/Month/1": {
            "title": "$:/language/Date/Short/Month/1",
            "text": "Jan"
        },
        "$:/language/Date/Short/Month/2": {
            "title": "$:/language/Date/Short/Month/2",
            "text": "Feb"
        },
        "$:/language/Date/Short/Month/3": {
            "title": "$:/language/Date/Short/Month/3",
            "text": "Mar"
        },
        "$:/language/Date/Short/Month/4": {
            "title": "$:/language/Date/Short/Month/4",
            "text": "Apr"
        },
        "$:/language/Date/Short/Month/5": {
            "title": "$:/language/Date/Short/Month/5",
            "text": "May"
        },
        "$:/language/Date/Short/Month/6": {
            "title": "$:/language/Date/Short/Month/6",
            "text": "Jun"
        },
        "$:/language/Date/Short/Month/7": {
            "title": "$:/language/Date/Short/Month/7",
            "text": "Jul"
        },
        "$:/language/Date/Short/Month/8": {
            "title": "$:/language/Date/Short/Month/8",
            "text": "Aug"
        },
        "$:/language/Date/Short/Month/9": {
            "title": "$:/language/Date/Short/Month/9",
            "text": "Sep"
        },
        "$:/language/Date/Short/Month/10": {
            "title": "$:/language/Date/Short/Month/10",
            "text": "Oct"
        },
        "$:/language/Date/Short/Month/11": {
            "title": "$:/language/Date/Short/Month/11",
            "text": "Nov"
        },
        "$:/language/Date/Short/Month/12": {
            "title": "$:/language/Date/Short/Month/12",
            "text": "Dec"
        },
        "$:/language/RelativeDate/Future/Days": {
            "title": "$:/language/RelativeDate/Future/Days",
            "text": "<<period>> days from now"
        },
        "$:/language/RelativeDate/Future/Hours": {
            "title": "$:/language/RelativeDate/Future/Hours",
            "text": "<<period>> hours from now"
        },
        "$:/language/RelativeDate/Future/Minutes": {
            "title": "$:/language/RelativeDate/Future/Minutes",
            "text": "<<period>> minutes from now"
        },
        "$:/language/RelativeDate/Future/Months": {
            "title": "$:/language/RelativeDate/Future/Months",
            "text": "<<period>> months from now"
        },
        "$:/language/RelativeDate/Future/Second": {
            "title": "$:/language/RelativeDate/Future/Second",
            "text": "1 second from now"
        },
        "$:/language/RelativeDate/Future/Seconds": {
            "title": "$:/language/RelativeDate/Future/Seconds",
            "text": "<<period>> seconds from now"
        },
        "$:/language/RelativeDate/Future/Years": {
            "title": "$:/language/RelativeDate/Future/Years",
            "text": "<<period>> years from now"
        },
        "$:/language/RelativeDate/Past/Days": {
            "title": "$:/language/RelativeDate/Past/Days",
            "text": "<<period>> days ago"
        },
        "$:/language/RelativeDate/Past/Hours": {
            "title": "$:/language/RelativeDate/Past/Hours",
            "text": "<<period>> hours ago"
        },
        "$:/language/RelativeDate/Past/Minutes": {
            "title": "$:/language/RelativeDate/Past/Minutes",
            "text": "<<period>> minutes ago"
        },
        "$:/language/RelativeDate/Past/Months": {
            "title": "$:/language/RelativeDate/Past/Months",
            "text": "<<period>> months ago"
        },
        "$:/language/RelativeDate/Past/Second": {
            "title": "$:/language/RelativeDate/Past/Second",
            "text": "1 second ago"
        },
        "$:/language/RelativeDate/Past/Seconds": {
            "title": "$:/language/RelativeDate/Past/Seconds",
            "text": "<<period>> seconds ago"
        },
        "$:/language/RelativeDate/Past/Years": {
            "title": "$:/language/RelativeDate/Past/Years",
            "text": "<<period>> years ago"
        },
        "$:/language/Docs/ModuleTypes/allfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/allfilteroperator",
            "text": "A sub-operator for the ''all'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/animation": {
            "title": "$:/language/Docs/ModuleTypes/animation",
            "text": "Animations that may be used with the RevealWidget."
        },
        "$:/language/Docs/ModuleTypes/authenticator": {
            "title": "$:/language/Docs/ModuleTypes/authenticator",
            "text": "Defines how requests are authenticated by the built-in HTTP server."
        },
        "$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
            "title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
            "text": "A bitmap editor toolbar operation."
        },
        "$:/language/Docs/ModuleTypes/command": {
            "title": "$:/language/Docs/ModuleTypes/command",
            "text": "Commands that can be executed under Node.js."
        },
        "$:/language/Docs/ModuleTypes/config": {
            "title": "$:/language/Docs/ModuleTypes/config",
            "text": "Data to be inserted into `$tw.config`."
        },
        "$:/language/Docs/ModuleTypes/filteroperator": {
            "title": "$:/language/Docs/ModuleTypes/filteroperator",
            "text": "Individual filter operator methods."
        },
        "$:/language/Docs/ModuleTypes/global": {
            "title": "$:/language/Docs/ModuleTypes/global",
            "text": "Global data to be inserted into `$tw`."
        },
        "$:/language/Docs/ModuleTypes/info": {
            "title": "$:/language/Docs/ModuleTypes/info",
            "text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
        },
        "$:/language/Docs/ModuleTypes/isfilteroperator": {
            "title": "$:/language/Docs/ModuleTypes/isfilteroperator",
            "text": "Operands for the ''is'' filter operator."
        },
        "$:/language/Docs/ModuleTypes/library": {
            "title": "$:/language/Docs/ModuleTypes/library",
            "text": "Generic module type for general purpose JavaScript modules."
        },
        "$:/language/Docs/ModuleTypes/macro": {
            "title": "$:/language/Docs/ModuleTypes/macro",
            "text": "JavaScript macro definitions."
        },
        "$:/language/Docs/ModuleTypes/parser": {
            "title": "$:/language/Docs/ModuleTypes/parser",
            "text": "Parsers for different content types."
        },
        "$:/language/Docs/ModuleTypes/route": {
            "title": "$:/language/Docs/ModuleTypes/route",
            "text": "Defines how individual URL patterns are handled by the built-in HTTP server."
        },
        "$:/language/Docs/ModuleTypes/saver": {
            "title": "$:/language/Docs/ModuleTypes/saver",
            "text": "Savers handle different methods for saving files from the browser."
        },
        "$:/language/Docs/ModuleTypes/startup": {
            "title": "$:/language/Docs/ModuleTypes/startup",
            "text": "Startup functions."
        },
        "$:/language/Docs/ModuleTypes/storyview": {
            "title": "$:/language/Docs/ModuleTypes/storyview",
            "text": "Story views customise the animation and behaviour of list widgets."
        },
        "$:/language/Docs/ModuleTypes/texteditoroperation": {
            "title": "$:/language/Docs/ModuleTypes/texteditoroperation",
            "text": "A text editor toolbar operation."
        },
        "$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
            "text": "Converts different content types into tiddlers."
        },
        "$:/language/Docs/ModuleTypes/tiddlerfield": {
            "title": "$:/language/Docs/ModuleTypes/tiddlerfield",
            "text": "Defines the behaviour of an individual tiddler field."
        },
        "$:/language/Docs/ModuleTypes/tiddlermethod": {
            "title": "$:/language/Docs/ModuleTypes/tiddlermethod",
            "text": "Adds methods to the `$tw.Tiddler` prototype."
        },
        "$:/language/Docs/ModuleTypes/upgrader": {
            "title": "$:/language/Docs/ModuleTypes/upgrader",
            "text": "Applies upgrade processing to tiddlers during an upgrade/import."
        },
        "$:/language/Docs/ModuleTypes/utils": {
            "title": "$:/language/Docs/ModuleTypes/utils",
            "text": "Adds methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/utils-node": {
            "title": "$:/language/Docs/ModuleTypes/utils-node",
            "text": "Adds Node.js-specific methods to `$tw.utils`."
        },
        "$:/language/Docs/ModuleTypes/widget": {
            "title": "$:/language/Docs/ModuleTypes/widget",
            "text": "Widgets encapsulate DOM rendering and refreshing."
        },
        "$:/language/Docs/ModuleTypes/wikimethod": {
            "title": "$:/language/Docs/ModuleTypes/wikimethod",
            "text": "Adds methods to `$tw.Wiki`."
        },
        "$:/language/Docs/ModuleTypes/wikirule": {
            "title": "$:/language/Docs/ModuleTypes/wikirule",
            "text": "Individual parser rules for the main WikiText parser."
        },
        "$:/language/Docs/PaletteColours/alert-background": {
            "title": "$:/language/Docs/PaletteColours/alert-background",
            "text": "Alert background"
        },
        "$:/language/Docs/PaletteColours/alert-border": {
            "title": "$:/language/Docs/PaletteColours/alert-border",
            "text": "Alert border"
        },
        "$:/language/Docs/PaletteColours/alert-highlight": {
            "title": "$:/language/Docs/PaletteColours/alert-highlight",
            "text": "Alert highlight"
        },
        "$:/language/Docs/PaletteColours/alert-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
            "text": "Alert muted foreground"
        },
        "$:/language/Docs/PaletteColours/background": {
            "title": "$:/language/Docs/PaletteColours/background",
            "text": "General background"
        },
        "$:/language/Docs/PaletteColours/blockquote-bar": {
            "title": "$:/language/Docs/PaletteColours/blockquote-bar",
            "text": "Blockquote bar"
        },
        "$:/language/Docs/PaletteColours/button-background": {
            "title": "$:/language/Docs/PaletteColours/button-background",
            "text": "Default button background"
        },
        "$:/language/Docs/PaletteColours/button-border": {
            "title": "$:/language/Docs/PaletteColours/button-border",
            "text": "Default button border"
        },
        "$:/language/Docs/PaletteColours/button-foreground": {
            "title": "$:/language/Docs/PaletteColours/button-foreground",
            "text": "Default button foreground"
        },
        "$:/language/Docs/PaletteColours/dirty-indicator": {
            "title": "$:/language/Docs/PaletteColours/dirty-indicator",
            "text": "Unsaved changes indicator"
        },
        "$:/language/Docs/PaletteColours/code-background": {
            "title": "$:/language/Docs/PaletteColours/code-background",
            "text": "Code background"
        },
        "$:/language/Docs/PaletteColours/code-border": {
            "title": "$:/language/Docs/PaletteColours/code-border",
            "text": "Code border"
        },
        "$:/language/Docs/PaletteColours/code-foreground": {
            "title": "$:/language/Docs/PaletteColours/code-foreground",
            "text": "Code foreground"
        },
        "$:/language/Docs/PaletteColours/download-background": {
            "title": "$:/language/Docs/PaletteColours/download-background",
            "text": "Download button background"
        },
        "$:/language/Docs/PaletteColours/download-foreground": {
            "title": "$:/language/Docs/PaletteColours/download-foreground",
            "text": "Download button foreground"
        },
        "$:/language/Docs/PaletteColours/dragger-background": {
            "title": "$:/language/Docs/PaletteColours/dragger-background",
            "text": "Dragger background"
        },
        "$:/language/Docs/PaletteColours/dragger-foreground": {
            "title": "$:/language/Docs/PaletteColours/dragger-foreground",
            "text": "Dragger foreground"
        },
        "$:/language/Docs/PaletteColours/dropdown-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-background",
            "text": "Dropdown background"
        },
        "$:/language/Docs/PaletteColours/dropdown-border": {
            "title": "$:/language/Docs/PaletteColours/dropdown-border",
            "text": "Dropdown border"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
            "text": "Dropdown tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/dropdown-tab-background": {
            "title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
            "text": "Dropdown tab background"
        },
        "$:/language/Docs/PaletteColours/dropzone-background": {
            "title": "$:/language/Docs/PaletteColours/dropzone-background",
            "text": "Dropzone background"
        },
        "$:/language/Docs/PaletteColours/external-link-background-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-hover",
            "text": "External link background hover"
        },
        "$:/language/Docs/PaletteColours/external-link-background-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-background-visited",
            "text": "External link background visited"
        },
        "$:/language/Docs/PaletteColours/external-link-background": {
            "title": "$:/language/Docs/PaletteColours/external-link-background",
            "text": "External link background"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
            "text": "External link foreground hover"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground-visited": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
            "text": "External link foreground visited"
        },
        "$:/language/Docs/PaletteColours/external-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/external-link-foreground",
            "text": "External link foreground"
        },
        "$:/language/Docs/PaletteColours/foreground": {
            "title": "$:/language/Docs/PaletteColours/foreground",
            "text": "General foreground"
        },
        "$:/language/Docs/PaletteColours/menubar-background": {
            "title": "$:/language/Docs/PaletteColours/menubar-background",
            "text": "Menu bar background"
        },
        "$:/language/Docs/PaletteColours/menubar-foreground": {
            "title": "$:/language/Docs/PaletteColours/menubar-foreground",
            "text": "Menu bar foreground"
        },
        "$:/language/Docs/PaletteColours/message-background": {
            "title": "$:/language/Docs/PaletteColours/message-background",
            "text": "Message box background"
        },
        "$:/language/Docs/PaletteColours/message-border": {
            "title": "$:/language/Docs/PaletteColours/message-border",
            "text": "Message box border"
        },
        "$:/language/Docs/PaletteColours/message-foreground": {
            "title": "$:/language/Docs/PaletteColours/message-foreground",
            "text": "Message box foreground"
        },
        "$:/language/Docs/PaletteColours/modal-backdrop": {
            "title": "$:/language/Docs/PaletteColours/modal-backdrop",
            "text": "Modal backdrop"
        },
        "$:/language/Docs/PaletteColours/modal-background": {
            "title": "$:/language/Docs/PaletteColours/modal-background",
            "text": "Modal background"
        },
        "$:/language/Docs/PaletteColours/modal-border": {
            "title": "$:/language/Docs/PaletteColours/modal-border",
            "text": "Modal border"
        },
        "$:/language/Docs/PaletteColours/modal-footer-background": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-background",
            "text": "Modal footer background"
        },
        "$:/language/Docs/PaletteColours/modal-footer-border": {
            "title": "$:/language/Docs/PaletteColours/modal-footer-border",
            "text": "Modal footer border"
        },
        "$:/language/Docs/PaletteColours/modal-header-border": {
            "title": "$:/language/Docs/PaletteColours/modal-header-border",
            "text": "Modal header border"
        },
        "$:/language/Docs/PaletteColours/muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/muted-foreground",
            "text": "General muted foreground"
        },
        "$:/language/Docs/PaletteColours/notification-background": {
            "title": "$:/language/Docs/PaletteColours/notification-background",
            "text": "Notification background"
        },
        "$:/language/Docs/PaletteColours/notification-border": {
            "title": "$:/language/Docs/PaletteColours/notification-border",
            "text": "Notification border"
        },
        "$:/language/Docs/PaletteColours/page-background": {
            "title": "$:/language/Docs/PaletteColours/page-background",
            "text": "Page background"
        },
        "$:/language/Docs/PaletteColours/pre-background": {
            "title": "$:/language/Docs/PaletteColours/pre-background",
            "text": "Preformatted code background"
        },
        "$:/language/Docs/PaletteColours/pre-border": {
            "title": "$:/language/Docs/PaletteColours/pre-border",
            "text": "Preformatted code border"
        },
        "$:/language/Docs/PaletteColours/primary": {
            "title": "$:/language/Docs/PaletteColours/primary",
            "text": "General primary"
        },
        "$:/language/Docs/PaletteColours/select-tag-background": {
            "title": "$:/language/Docs/PaletteColours/select-tag-background",
            "text": "`<select>` element background"
        },
        "$:/language/Docs/PaletteColours/select-tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/select-tag-foreground",
            "text": "`<select>` element text"
        },
        "$:/language/Docs/PaletteColours/sidebar-button-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
            "text": "Sidebar button foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
            "text": "Sidebar controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
            "text": "Sidebar controls foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
            "text": "Sidebar foreground shadow"
        },
        "$:/language/Docs/PaletteColours/sidebar-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-foreground",
            "text": "Sidebar foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
            "text": "Sidebar muted foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
            "text": "Sidebar muted foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
            "text": "Sidebar tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-background": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
            "text": "Sidebar tab background"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
            "text": "Sidebar tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-border": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
            "text": "Sidebar tab border"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-divider": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
            "text": "Sidebar tab divider"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
            "text": "Sidebar tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
            "text": "Sidebar tab foreground"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
            "text": "Sidebar tiddler link foreground hover"
        },
        "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
            "text": "Sidebar tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/site-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/site-title-foreground",
            "text": "Site title foreground"
        },
        "$:/language/Docs/PaletteColours/static-alert-foreground": {
            "title": "$:/language/Docs/PaletteColours/static-alert-foreground",
            "text": "Static alert foreground"
        },
        "$:/language/Docs/PaletteColours/tab-background-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-background-selected",
            "text": "Tab background for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-background": {
            "title": "$:/language/Docs/PaletteColours/tab-background",
            "text": "Tab background"
        },
        "$:/language/Docs/PaletteColours/tab-border-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-border-selected",
            "text": "Tab border for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-border": {
            "title": "$:/language/Docs/PaletteColours/tab-border",
            "text": "Tab border"
        },
        "$:/language/Docs/PaletteColours/tab-divider": {
            "title": "$:/language/Docs/PaletteColours/tab-divider",
            "text": "Tab divider"
        },
        "$:/language/Docs/PaletteColours/tab-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
            "text": "Tab foreground for selected tabs"
        },
        "$:/language/Docs/PaletteColours/tab-foreground": {
            "title": "$:/language/Docs/PaletteColours/tab-foreground",
            "text": "Tab foreground"
        },
        "$:/language/Docs/PaletteColours/table-border": {
            "title": "$:/language/Docs/PaletteColours/table-border",
            "text": "Table border"
        },
        "$:/language/Docs/PaletteColours/table-footer-background": {
            "title": "$:/language/Docs/PaletteColours/table-footer-background",
            "text": "Table footer background"
        },
        "$:/language/Docs/PaletteColours/table-header-background": {
            "title": "$:/language/Docs/PaletteColours/table-header-background",
            "text": "Table header background"
        },
        "$:/language/Docs/PaletteColours/tag-background": {
            "title": "$:/language/Docs/PaletteColours/tag-background",
            "text": "Tag background"
        },
        "$:/language/Docs/PaletteColours/tag-foreground": {
            "title": "$:/language/Docs/PaletteColours/tag-foreground",
            "text": "Tag foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-background",
            "text": "Tiddler background"
        },
        "$:/language/Docs/PaletteColours/tiddler-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-border",
            "text": "Tiddler border"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
            "text": "Tiddler controls foreground hover"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
            "text": "Tiddler controls foreground for selected controls"
        },
        "$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
            "text": "Tiddler controls foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
            "text": "Tiddler editor background"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
            "text": "Tiddler editor border image"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
            "text": "Tiddler editor border"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
            "text": "Tiddler editor background for even fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
            "title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
            "text": "Tiddler editor background for odd fields"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-background",
            "text": "Tiddler info panel background"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-border": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-border",
            "text": "Tiddler info panel border"
        },
        "$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
            "text": "Tiddler info panel tab background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-background": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-background",
            "text": "Tiddler link background"
        },
        "$:/language/Docs/PaletteColours/tiddler-link-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
            "text": "Tiddler link foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
            "text": "Tiddler subtitle foreground"
        },
        "$:/language/Docs/PaletteColours/tiddler-title-foreground": {
            "title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
            "text": "Tiddler title foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-new-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-new-button",
            "text": "Toolbar 'new tiddler' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-options-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-options-button",
            "text": "Toolbar 'options' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-save-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-save-button",
            "text": "Toolbar 'save' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-info-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-info-button",
            "text": "Toolbar 'info' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-edit-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
            "text": "Toolbar 'edit' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-close-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-close-button",
            "text": "Toolbar 'close' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-delete-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
            "text": "Toolbar 'delete' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-cancel-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
            "text": "Toolbar 'cancel' button foreground"
        },
        "$:/language/Docs/PaletteColours/toolbar-done-button": {
            "title": "$:/language/Docs/PaletteColours/toolbar-done-button",
            "text": "Toolbar 'done' button foreground"
        },
        "$:/language/Docs/PaletteColours/untagged-background": {
            "title": "$:/language/Docs/PaletteColours/untagged-background",
            "text": "Untagged pill background"
        },
        "$:/language/Docs/PaletteColours/very-muted-foreground": {
            "title": "$:/language/Docs/PaletteColours/very-muted-foreground",
            "text": "Very muted foreground"
        },
        "$:/language/EditTemplate/Body/External/Hint": {
            "title": "$:/language/EditTemplate/Body/External/Hint",
            "text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
        },
        "$:/language/EditTemplate/Body/Placeholder": {
            "title": "$:/language/EditTemplate/Body/Placeholder",
            "text": "Type the text for this tiddler"
        },
        "$:/language/EditTemplate/Body/Preview/Type/Output": {
            "title": "$:/language/EditTemplate/Body/Preview/Type/Output",
            "text": "output"
        },
        "$:/language/EditTemplate/Field/Remove/Caption": {
            "title": "$:/language/EditTemplate/Field/Remove/Caption",
            "text": "remove field"
        },
        "$:/language/EditTemplate/Field/Remove/Hint": {
            "title": "$:/language/EditTemplate/Field/Remove/Hint",
            "text": "Remove field"
        },
        "$:/language/EditTemplate/Field/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Field/Dropdown/Caption",
            "text": "field list"
        },
        "$:/language/EditTemplate/Field/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Field/Dropdown/Hint",
            "text": "Show field list"
        },
        "$:/language/EditTemplate/Fields/Add/Button": {
            "title": "$:/language/EditTemplate/Fields/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Fields/Add/Button/Hint": {
            "title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
            "text": "Add the new field to the tiddler"
        },
        "$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
            "text": "field name"
        },
        "$:/language/EditTemplate/Fields/Add/Prompt": {
            "title": "$:/language/EditTemplate/Fields/Add/Prompt",
            "text": "Add a new field:"
        },
        "$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
            "title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
            "text": "field value"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/System": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
            "text": "System fields"
        },
        "$:/language/EditTemplate/Fields/Add/Dropdown/User": {
            "title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
            "text": "User fields"
        },
        "$:/language/EditTemplate/Shadow/Warning": {
            "title": "$:/language/EditTemplate/Shadow/Warning",
            "text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
        },
        "$:/language/EditTemplate/Shadow/OverriddenWarning": {
            "title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
            "text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
        },
        "$:/language/EditTemplate/Tags/Add/Button": {
            "title": "$:/language/EditTemplate/Tags/Add/Button",
            "text": "add"
        },
        "$:/language/EditTemplate/Tags/Add/Button/Hint": {
            "title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
            "text": "add tag"
        },
        "$:/language/EditTemplate/Tags/Add/Placeholder": {
            "title": "$:/language/EditTemplate/Tags/Add/Placeholder",
            "text": "tag name"
        },
        "$:/language/EditTemplate/Tags/ClearInput/Caption": {
            "title": "$:/language/EditTemplate/Tags/ClearInput/Caption",
            "text": "clear input"
        },
        "$:/language/EditTemplate/Tags/ClearInput/Hint": {
            "title": "$:/language/EditTemplate/Tags/ClearInput/Hint",
            "text": "Clear tag input"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
            "text": "tag list"
        },
        "$:/language/EditTemplate/Tags/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
            "text": "Show tag list"
        },
        "$:/language/EditTemplate/Title/BadCharacterWarning": {
            "title": "$:/language/EditTemplate/Title/BadCharacterWarning",
            "text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
        },
        "$:/language/EditTemplate/Title/Exists/Prompt": {
            "title": "$:/language/EditTemplate/Title/Exists/Prompt",
            "text": "Target tiddler already exists"
        },
        "$:/language/EditTemplate/Title/Relink/Prompt": {
            "title": "$:/language/EditTemplate/Title/Relink/Prompt",
            "text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
        },
        "$:/language/EditTemplate/Title/References/Prompt": {
            "title": "$:/language/EditTemplate/Title/References/Prompt",
            "text": "The following references to this tiddler will not be automatically updated:"
        },
        "$:/language/EditTemplate/Type/Dropdown/Caption": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Caption",
            "text": "content type list"
        },
        "$:/language/EditTemplate/Type/Dropdown/Hint": {
            "title": "$:/language/EditTemplate/Type/Dropdown/Hint",
            "text": "Show content type list"
        },
        "$:/language/EditTemplate/Type/Delete/Caption": {
            "title": "$:/language/EditTemplate/Type/Delete/Caption",
            "text": "delete content type"
        },
        "$:/language/EditTemplate/Type/Delete/Hint": {
            "title": "$:/language/EditTemplate/Type/Delete/Hint",
            "text": "Delete content type"
        },
        "$:/language/EditTemplate/Type/Placeholder": {
            "title": "$:/language/EditTemplate/Type/Placeholder",
            "text": "content type"
        },
        "$:/language/EditTemplate/Type/Prompt": {
            "title": "$:/language/EditTemplate/Type/Prompt",
            "text": "Type:"
        },
        "$:/language/Exporters/StaticRiver": {
            "title": "$:/language/Exporters/StaticRiver",
            "text": "Static HTML"
        },
        "$:/language/Exporters/JsonFile": {
            "title": "$:/language/Exporters/JsonFile",
            "text": "JSON file"
        },
        "$:/language/Exporters/CsvFile": {
            "title": "$:/language/Exporters/CsvFile",
            "text": "CSV file"
        },
        "$:/language/Exporters/TidFile": {
            "title": "$:/language/Exporters/TidFile",
            "text": "\".tid\" file"
        },
        "$:/language/Docs/Fields/_canonical_uri": {
            "title": "$:/language/Docs/Fields/_canonical_uri",
            "text": "The full URI of an external image tiddler"
        },
        "$:/language/Docs/Fields/bag": {
            "title": "$:/language/Docs/Fields/bag",
            "text": "The name of the bag from which a tiddler came"
        },
        "$:/language/Docs/Fields/caption": {
            "title": "$:/language/Docs/Fields/caption",
            "text": "The text to be displayed on a tab or button"
        },
        "$:/language/Docs/Fields/color": {
            "title": "$:/language/Docs/Fields/color",
            "text": "The CSS color value associated with a tiddler"
        },
        "$:/language/Docs/Fields/component": {
            "title": "$:/language/Docs/Fields/component",
            "text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
        },
        "$:/language/Docs/Fields/current-tiddler": {
            "title": "$:/language/Docs/Fields/current-tiddler",
            "text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
        },
        "$:/language/Docs/Fields/created": {
            "title": "$:/language/Docs/Fields/created",
            "text": "The date a tiddler was created"
        },
        "$:/language/Docs/Fields/creator": {
            "title": "$:/language/Docs/Fields/creator",
            "text": "The name of the person who created a tiddler"
        },
        "$:/language/Docs/Fields/dependents": {
            "title": "$:/language/Docs/Fields/dependents",
            "text": "For a plugin, lists the dependent plugin titles"
        },
        "$:/language/Docs/Fields/description": {
            "title": "$:/language/Docs/Fields/description",
            "text": "The descriptive text for a plugin, or a modal dialogue"
        },
        "$:/language/Docs/Fields/draft.of": {
            "title": "$:/language/Docs/Fields/draft.of",
            "text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
        },
        "$:/language/Docs/Fields/draft.title": {
            "title": "$:/language/Docs/Fields/draft.title",
            "text": "For draft tiddlers, contains the proposed new title of the tiddler"
        },
        "$:/language/Docs/Fields/footer": {
            "title": "$:/language/Docs/Fields/footer",
            "text": "The footer text for a wizard"
        },
        "$:/language/Docs/Fields/hide-body": {
            "title": "$:/language/Docs/Fields/hide-body",
            "text": "The view template will hide bodies of tiddlers if set to: ''yes''"
        },
        "$:/language/Docs/Fields/icon": {
            "title": "$:/language/Docs/Fields/icon",
            "text": "The title of the tiddler containing the icon associated with a tiddler"
        },
        "$:/language/Docs/Fields/library": {
            "title": "$:/language/Docs/Fields/library",
            "text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
        },
        "$:/language/Docs/Fields/list": {
            "title": "$:/language/Docs/Fields/list",
            "text": "An ordered list of tiddler titles associated with a tiddler"
        },
        "$:/language/Docs/Fields/list-before": {
            "title": "$:/language/Docs/Fields/list-before",
            "text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/list-after": {
            "title": "$:/language/Docs/Fields/list-after",
            "text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
        },
        "$:/language/Docs/Fields/modified": {
            "title": "$:/language/Docs/Fields/modified",
            "text": "The date and time at which a tiddler was last modified"
        },
        "$:/language/Docs/Fields/modifier": {
            "title": "$:/language/Docs/Fields/modifier",
            "text": "The tiddler title associated with the person who last modified a tiddler"
        },
        "$:/language/Docs/Fields/name": {
            "title": "$:/language/Docs/Fields/name",
            "text": "The human readable name associated with a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-priority": {
            "title": "$:/language/Docs/Fields/plugin-priority",
            "text": "A numerical value indicating the priority of a plugin tiddler"
        },
        "$:/language/Docs/Fields/plugin-type": {
            "title": "$:/language/Docs/Fields/plugin-type",
            "text": "The type of plugin in a plugin tiddler"
        },
        "$:/language/Docs/Fields/revision": {
            "title": "$:/language/Docs/Fields/revision",
            "text": "The revision of the tiddler held at the server"
        },
        "$:/language/Docs/Fields/released": {
            "title": "$:/language/Docs/Fields/released",
            "text": "Date of a TiddlyWiki release"
        },
        "$:/language/Docs/Fields/source": {
            "title": "$:/language/Docs/Fields/source",
            "text": "The source URL associated with a tiddler"
        },
        "$:/language/Docs/Fields/subtitle": {
            "title": "$:/language/Docs/Fields/subtitle",
            "text": "The subtitle text for a wizard"
        },
        "$:/language/Docs/Fields/tags": {
            "title": "$:/language/Docs/Fields/tags",
            "text": "A list of tags associated with a tiddler"
        },
        "$:/language/Docs/Fields/text": {
            "title": "$:/language/Docs/Fields/text",
            "text": "The body text of a tiddler"
        },
        "$:/language/Docs/Fields/throttle.refresh": {
            "title": "$:/language/Docs/Fields/throttle.refresh",
            "text": "If present, throttles refreshes of this tiddler"
        },
        "$:/language/Docs/Fields/title": {
            "title": "$:/language/Docs/Fields/title",
            "text": "The unique name of a tiddler"
        },
        "$:/language/Docs/Fields/toc-link": {
            "title": "$:/language/Docs/Fields/toc-link",
            "text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
        },
        "$:/language/Docs/Fields/type": {
            "title": "$:/language/Docs/Fields/type",
            "text": "The content type of a tiddler"
        },
        "$:/language/Docs/Fields/version": {
            "title": "$:/language/Docs/Fields/version",
            "text": "Version information for a plugin"
        },
        "$:/language/Docs/Fields/_is_skinny": {
            "title": "$:/language/Docs/Fields/_is_skinny",
            "text": "If present, indicates that the tiddler text field must be loaded from the server"
        },
        "$:/language/Filters/AllTiddlers": {
            "title": "$:/language/Filters/AllTiddlers",
            "text": "All tiddlers except system tiddlers"
        },
        "$:/language/Filters/RecentSystemTiddlers": {
            "title": "$:/language/Filters/RecentSystemTiddlers",
            "text": "Recently modified tiddlers, including system tiddlers"
        },
        "$:/language/Filters/RecentTiddlers": {
            "title": "$:/language/Filters/RecentTiddlers",
            "text": "Recently modified tiddlers"
        },
        "$:/language/Filters/AllTags": {
            "title": "$:/language/Filters/AllTags",
            "text": "All tags except system tags"
        },
        "$:/language/Filters/Missing": {
            "title": "$:/language/Filters/Missing",
            "text": "Missing tiddlers"
        },
        "$:/language/Filters/Drafts": {
            "title": "$:/language/Filters/Drafts",
            "text": "Draft tiddlers"
        },
        "$:/language/Filters/Orphans": {
            "title": "$:/language/Filters/Orphans",
            "text": "Orphan tiddlers"
        },
        "$:/language/Filters/SystemTiddlers": {
            "title": "$:/language/Filters/SystemTiddlers",
            "text": "System tiddlers"
        },
        "$:/language/Filters/ShadowTiddlers": {
            "title": "$:/language/Filters/ShadowTiddlers",
            "text": "Shadow tiddlers"
        },
        "$:/language/Filters/OverriddenShadowTiddlers": {
            "title": "$:/language/Filters/OverriddenShadowTiddlers",
            "text": "Overridden shadow tiddlers"
        },
        "$:/language/Filters/SessionTiddlers": {
            "title": "$:/language/Filters/SessionTiddlers",
            "text": "Tiddlers modified since the wiki was loaded"
        },
        "$:/language/Filters/SystemTags": {
            "title": "$:/language/Filters/SystemTags",
            "text": "System tags"
        },
        "$:/language/Filters/StoryList": {
            "title": "$:/language/Filters/StoryList",
            "text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
        },
        "$:/language/Filters/TypedTiddlers": {
            "title": "$:/language/Filters/TypedTiddlers",
            "text": "Non wiki-text tiddlers"
        },
        "GettingStarted": {
            "title": "GettingStarted",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
        },
        "$:/language/Help/build": {
            "title": "$:/language/Help/build",
            "description": "Automatically run configured commands",
            "text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
        },
        "$:/language/Help/clearpassword": {
            "title": "$:/language/Help/clearpassword",
            "description": "Clear a password for subsequent crypto operations",
            "text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
        },
        "$:/language/Help/default": {
            "title": "$:/language/Help/default",
            "text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
        },
        "$:/language/Help/deletetiddlers": {
            "title": "$:/language/Help/deletetiddlers",
            "description": "Deletes a group of tiddlers",
            "text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
        },
        "$:/language/Help/editions": {
            "title": "$:/language/Help/editions",
            "description": "Lists the available editions of TiddlyWiki",
            "text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
        },
        "$:/language/Help/fetch": {
            "title": "$:/language/Help/fetch",
            "description": "Fetch tiddlers from wiki by URL",
            "text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
        },
        "$:/language/Help/help": {
            "title": "$:/language/Help/help",
            "description": "Display help for TiddlyWiki commands",
            "text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
        },
        "$:/language/Help/import": {
            "title": "$:/language/Help/import",
            "description": "Import tiddlers from a file",
            "text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/init": {
            "title": "$:/language/Help/init",
            "description": "Initialise a new wiki folder",
            "text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
        },
        "$:/language/Help/listen": {
            "title": "$:/language/Help/listen",
            "description": "Provides an HTTP server interface to TiddlyWiki",
            "text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
        },
        "$:/language/Help/load": {
            "title": "$:/language/Help/load",
            "description": "Load tiddlers from a file",
            "text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
        },
        "$:/language/Help/makelibrary": {
            "title": "$:/language/Help/makelibrary",
            "description": "Construct library plugin required by upgrade process",
            "text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
        },
        "$:/language/Help/notfound": {
            "title": "$:/language/Help/notfound",
            "text": "No such help item"
        },
        "$:/language/Help/output": {
            "title": "$:/language/Help/output",
            "description": "Set the base output directory for subsequent commands",
            "text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
        },
        "$:/language/Help/password": {
            "title": "$:/language/Help/password",
            "description": "Set a password for subsequent crypto operations",
            "text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
        },
        "$:/language/Help/render": {
            "title": "$:/language/Help/render",
            "description": "Renders individual tiddlers to files",
            "text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
        },
        "$:/language/Help/rendertiddler": {
            "title": "$:/language/Help/rendertiddler",
            "description": "Render an individual tiddler as a specified ContentType",
            "text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
        },
        "$:/language/Help/rendertiddlers": {
            "title": "$:/language/Help/rendertiddlers",
            "description": "Render tiddlers matching a filter to a specified ContentType",
            "text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers '<filter>' <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers '[!is[system]]' $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
        },
        "$:/language/Help/save": {
            "title": "$:/language/Help/save",
            "description": "Saves individual raw tiddlers to files",
            "text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
        },
        "$:/language/Help/savetiddler": {
            "title": "$:/language/Help/savetiddler",
            "description": "Saves a raw tiddler to a file",
            "text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
        },
        "$:/language/Help/savetiddlers": {
            "title": "$:/language/Help/savetiddlers",
            "description": "Saves a group of raw tiddlers to a directory",
            "text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
        },
        "$:/language/Help/savewikifolder": {
            "title": "$:/language/Help/savewikifolder",
            "description": "Saves a wiki to a new wiki folder",
            "text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
        },
        "$:/language/Help/server": {
            "title": "$:/language/Help/server",
            "description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
            "text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
        },
        "$:/language/Help/setfield": {
            "title": "$:/language/Help/setfield",
            "description": "Prepares external tiddlers for use",
            "text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
        },
        "$:/language/Help/unpackplugin": {
            "title": "$:/language/Help/unpackplugin",
            "description": "Unpack the payload tiddlers from a plugin",
            "text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
        },
        "$:/language/Help/verbose": {
            "title": "$:/language/Help/verbose",
            "description": "Triggers verbose output mode",
            "text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
        },
        "$:/language/Help/version": {
            "title": "$:/language/Help/version",
            "description": "Displays the version number of TiddlyWiki",
            "text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
        },
        "$:/language/Import/Imported/Hint": {
            "title": "$:/language/Import/Imported/Hint",
            "text": "The following tiddlers were imported:"
        },
        "$:/language/Import/Listing/Cancel/Caption": {
            "title": "$:/language/Import/Listing/Cancel/Caption",
            "text": "Cancel"
        },
        "$:/language/Import/Listing/Hint": {
            "title": "$:/language/Import/Listing/Hint",
            "text": "These tiddlers are ready to import:"
        },
        "$:/language/Import/Listing/Import/Caption": {
            "title": "$:/language/Import/Listing/Import/Caption",
            "text": "Import"
        },
        "$:/language/Import/Listing/Select/Caption": {
            "title": "$:/language/Import/Listing/Select/Caption",
            "text": "Select"
        },
        "$:/language/Import/Listing/Status/Caption": {
            "title": "$:/language/Import/Listing/Status/Caption",
            "text": "Status"
        },
        "$:/language/Import/Listing/Title/Caption": {
            "title": "$:/language/Import/Listing/Title/Caption",
            "text": "Title"
        },
        "$:/language/Import/Listing/Preview": {
            "title": "$:/language/Import/Listing/Preview",
            "text": "Preview:"
        },
        "$:/language/Import/Listing/Preview/Text": {
            "title": "$:/language/Import/Listing/Preview/Text",
            "text": "Text"
        },
        "$:/language/Import/Listing/Preview/TextRaw": {
            "title": "$:/language/Import/Listing/Preview/TextRaw",
            "text": "Text (Raw)"
        },
        "$:/language/Import/Listing/Preview/Fields": {
            "title": "$:/language/Import/Listing/Preview/Fields",
            "text": "Fields"
        },
        "$:/language/Import/Listing/Preview/Diff": {
            "title": "$:/language/Import/Listing/Preview/Diff",
            "text": "Diff"
        },
        "$:/language/Import/Listing/Preview/DiffFields": {
            "title": "$:/language/Import/Listing/Preview/DiffFields",
            "text": "Diff (Fields)"
        },
        "$:/language/Import/Listing/Rename/Tooltip": {
            "title": "$:/language/Import/Listing/Rename/Tooltip",
            "text": "Rename tiddler before importing"
        },
        "$:/language/Import/Listing/Rename/Prompt": {
            "title": "$:/language/Import/Listing/Rename/Prompt",
            "text": "Rename to:"
        },
        "$:/language/Import/Listing/Rename/ConfirmRename": {
            "title": "$:/language/Import/Listing/Rename/ConfirmRename",
            "text": "Rename tiddler"
        },
        "$:/language/Import/Listing/Rename/CancelRename": {
            "title": "$:/language/Import/Listing/Rename/CancelRename",
            "text": "Cancel"
        },
        "$:/language/Import/Listing/Rename/OverwriteWarning": {
            "title": "$:/language/Import/Listing/Rename/OverwriteWarning",
            "text": "A tiddler with this title already exists."
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
            "text": "Blocked incompatible or obsolete plugin."
        },
        "$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
            "title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
            "text": "Blocked plugin (due to incoming <<incoming>> not being newer than existing <<existing>>)."
        },
        "$:/language/Import/Upgrader/Plugins/Upgraded": {
            "title": "$:/language/Import/Upgrader/Plugins/Upgraded",
            "text": "Upgraded plugin from <<incoming>> to <<upgraded>>."
        },
        "$:/language/Import/Upgrader/State/Suppressed": {
            "title": "$:/language/Import/Upgrader/State/Suppressed",
            "text": "Blocked temporary state tiddler."
        },
        "$:/language/Import/Upgrader/System/Suppressed": {
            "title": "$:/language/Import/Upgrader/System/Suppressed",
            "text": "Blocked system tiddler."
        },
        "$:/language/Import/Upgrader/System/Warning": {
            "title": "$:/language/Import/Upgrader/System/Warning",
            "text": "Core module tiddler."
        },
        "$:/language/Import/Upgrader/System/Alert": {
            "title": "$:/language/Import/Upgrader/System/Alert",
            "text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable."
        },
        "$:/language/Import/Upgrader/ThemeTweaks/Created": {
            "title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
            "text": "Migrated theme tweak from <$text text=<<from>>/>."
        },
        "$:/language/AboveStory/ClassicPlugin/Warning": {
            "title": "$:/language/AboveStory/ClassicPlugin/Warning",
            "text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
        },
        "$:/language/BinaryWarning/Prompt": {
            "title": "$:/language/BinaryWarning/Prompt",
            "text": "This tiddler contains binary data"
        },
        "$:/language/ClassicWarning/Hint": {
            "title": "$:/language/ClassicWarning/Hint",
            "text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
        },
        "$:/language/ClassicWarning/Upgrade/Caption": {
            "title": "$:/language/ClassicWarning/Upgrade/Caption",
            "text": "upgrade"
        },
        "$:/language/CloseAll/Button": {
            "title": "$:/language/CloseAll/Button",
            "text": "close all"
        },
        "$:/language/ColourPicker/Recent": {
            "title": "$:/language/ColourPicker/Recent",
            "text": "Recent:"
        },
        "$:/language/ConfirmCancelTiddler": {
            "title": "$:/language/ConfirmCancelTiddler",
            "text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmDeleteTiddler": {
            "title": "$:/language/ConfirmDeleteTiddler",
            "text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmOverwriteTiddler": {
            "title": "$:/language/ConfirmOverwriteTiddler",
            "text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmEditShadowTiddler": {
            "title": "$:/language/ConfirmEditShadowTiddler",
            "text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
        },
        "$:/language/ConfirmAction": {
            "title": "$:/language/ConfirmAction",
            "text": "Do you wish to proceed?"
        },
        "$:/language/Count": {
            "title": "$:/language/Count",
            "text": "count"
        },
        "$:/language/DefaultNewTiddlerTitle": {
            "title": "$:/language/DefaultNewTiddlerTitle",
            "text": "New Tiddler"
        },
        "$:/language/Diffs/CountMessage": {
            "title": "$:/language/Diffs/CountMessage",
            "text": "<<diff-count>> differences"
        },
        "$:/language/DropMessage": {
            "title": "$:/language/DropMessage",
            "text": "Drop here (or use the 'Escape' key to cancel)"
        },
        "$:/language/Encryption/Cancel": {
            "title": "$:/language/Encryption/Cancel",
            "text": "Cancel"
        },
        "$:/language/Encryption/ConfirmClearPassword": {
            "title": "$:/language/Encryption/ConfirmClearPassword",
            "text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
        },
        "$:/language/Encryption/PromptSetPassword": {
            "title": "$:/language/Encryption/PromptSetPassword",
            "text": "Set a new password for this TiddlyWiki"
        },
        "$:/language/Encryption/Username": {
            "title": "$:/language/Encryption/Username",
            "text": "Username"
        },
        "$:/language/Encryption/Password": {
            "title": "$:/language/Encryption/Password",
            "text": "Password"
        },
        "$:/language/Encryption/RepeatPassword": {
            "title": "$:/language/Encryption/RepeatPassword",
            "text": "Repeat password"
        },
        "$:/language/Encryption/PasswordNoMatch": {
            "title": "$:/language/Encryption/PasswordNoMatch",
            "text": "Passwords do not match"
        },
        "$:/language/Encryption/SetPassword": {
            "title": "$:/language/Encryption/SetPassword",
            "text": "Set password"
        },
        "$:/language/Error/Caption": {
            "title": "$:/language/Error/Caption",
            "text": "Error"
        },
        "$:/language/Error/EditConflict": {
            "title": "$:/language/Error/EditConflict",
            "text": "File changed on server"
        },
        "$:/language/Error/Filter": {
            "title": "$:/language/Error/Filter",
            "text": "Filter error"
        },
        "$:/language/Error/FilterSyntax": {
            "title": "$:/language/Error/FilterSyntax",
            "text": "Syntax error in filter expression"
        },
        "$:/language/Error/FilterRunPrefix": {
            "title": "$:/language/Error/FilterRunPrefix",
            "text": "Filter Error: Unknown prefix for filter run"
        },
        "$:/language/Error/IsFilterOperator": {
            "title": "$:/language/Error/IsFilterOperator",
            "text": "Filter Error: Unknown operand for the 'is' filter operator"
        },
        "$:/language/Error/FormatFilterOperator": {
            "title": "$:/language/Error/FormatFilterOperator",
            "text": "Filter Error: Unknown suffix for the 'format' filter operator"
        },
        "$:/language/Error/LoadingPluginLibrary": {
            "title": "$:/language/Error/LoadingPluginLibrary",
            "text": "Error loading plugin library"
        },
        "$:/language/Error/NetworkErrorAlert": {
            "title": "$:/language/Error/NetworkErrorAlert",
            "text": "`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"
        },
        "$:/language/Error/RecursiveTransclusion": {
            "title": "$:/language/Error/RecursiveTransclusion",
            "text": "Recursive transclusion error in transclude widget"
        },
        "$:/language/Error/RetrievingSkinny": {
            "title": "$:/language/Error/RetrievingSkinny",
            "text": "Error retrieving skinny tiddler list"
        },
        "$:/language/Error/SavingToTWEdit": {
            "title": "$:/language/Error/SavingToTWEdit",
            "text": "Error saving to TWEdit"
        },
        "$:/language/Error/WhileSaving": {
            "title": "$:/language/Error/WhileSaving",
            "text": "Error while saving"
        },
        "$:/language/Error/XMLHttpRequest": {
            "title": "$:/language/Error/XMLHttpRequest",
            "text": "XMLHttpRequest error code"
        },
        "$:/language/InternalJavaScriptError/Title": {
            "title": "$:/language/InternalJavaScriptError/Title",
            "text": "Internal JavaScript Error"
        },
        "$:/language/InternalJavaScriptError/Hint": {
            "title": "$:/language/InternalJavaScriptError/Hint",
            "text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
        },
        "$:/language/InvalidFieldName": {
            "title": "$:/language/InvalidFieldName",
            "text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
        },
        "$:/language/LayoutSwitcher/Description": {
            "title": "$:/language/LayoutSwitcher/Description",
            "text": "Open the layout switcher"
        },
        "$:/language/LazyLoadingWarning": {
            "title": "$:/language/LazyLoadingWarning",
            "text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
        },
        "$:/language/LoginToTiddlySpace": {
            "title": "$:/language/LoginToTiddlySpace",
            "text": "Login to TiddlySpace"
        },
        "$:/language/Manager/Controls/FilterByTag/None": {
            "title": "$:/language/Manager/Controls/FilterByTag/None",
            "text": "(none)"
        },
        "$:/language/Manager/Controls/FilterByTag/Prompt": {
            "title": "$:/language/Manager/Controls/FilterByTag/Prompt",
            "text": "Filter by tag:"
        },
        "$:/language/Manager/Controls/Order/Prompt": {
            "title": "$:/language/Manager/Controls/Order/Prompt",
            "text": "Reverse order"
        },
        "$:/language/Manager/Controls/Search/Placeholder": {
            "title": "$:/language/Manager/Controls/Search/Placeholder",
            "text": "Search"
        },
        "$:/language/Manager/Controls/Search/Prompt": {
            "title": "$:/language/Manager/Controls/Search/Prompt",
            "text": "Search:"
        },
        "$:/language/Manager/Controls/Show/Option/Tags": {
            "title": "$:/language/Manager/Controls/Show/Option/Tags",
            "text": "tags"
        },
        "$:/language/Manager/Controls/Show/Option/Tiddlers": {
            "title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
            "text": "tiddlers"
        },
        "$:/language/Manager/Controls/Show/Prompt": {
            "title": "$:/language/Manager/Controls/Show/Prompt",
            "text": "Show:"
        },
        "$:/language/Manager/Controls/Sort/Prompt": {
            "title": "$:/language/Manager/Controls/Sort/Prompt",
            "text": "Sort by:"
        },
        "$:/language/Manager/Item/Colour": {
            "title": "$:/language/Manager/Item/Colour",
            "text": "Colour"
        },
        "$:/language/Manager/Item/Fields": {
            "title": "$:/language/Manager/Item/Fields",
            "text": "Fields"
        },
        "$:/language/Manager/Item/Icon/None": {
            "title": "$:/language/Manager/Item/Icon/None",
            "text": "(none)"
        },
        "$:/language/Manager/Item/Icon": {
            "title": "$:/language/Manager/Item/Icon",
            "text": "Icon"
        },
        "$:/language/Manager/Item/RawText": {
            "title": "$:/language/Manager/Item/RawText",
            "text": "Raw text"
        },
        "$:/language/Manager/Item/Tags": {
            "title": "$:/language/Manager/Item/Tags",
            "text": "Tags"
        },
        "$:/language/Manager/Item/Tools": {
            "title": "$:/language/Manager/Item/Tools",
            "text": "Tools"
        },
        "$:/language/Manager/Item/WikifiedText": {
            "title": "$:/language/Manager/Item/WikifiedText",
            "text": "Wikified text"
        },
        "$:/language/MissingTiddler/Hint": {
            "title": "$:/language/MissingTiddler/Hint",
            "text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
        },
        "$:/language/No": {
            "title": "$:/language/No",
            "text": "No"
        },
        "$:/language/OfficialPluginLibrary": {
            "title": "$:/language/OfficialPluginLibrary",
            "text": "Official ~TiddlyWiki Plugin Library"
        },
        "$:/language/OfficialPluginLibrary/Hint": {
            "title": "$:/language/OfficialPluginLibrary/Hint",
            "text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
        },
        "$:/language/PageTemplate/Description": {
            "title": "$:/language/PageTemplate/Description",
            "text": "the default ~TiddlyWiki layout"
        },
        "$:/language/PageTemplate/Name": {
            "title": "$:/language/PageTemplate/Name",
            "text": "Default ~PageTemplate"
        },
        "$:/language/PluginReloadWarning": {
            "title": "$:/language/PluginReloadWarning",
            "text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"
        },
        "$:/language/RecentChanges/DateFormat": {
            "title": "$:/language/RecentChanges/DateFormat",
            "text": "DDth MMM YYYY"
        },
        "$:/language/Shortcuts/Input/AdvancedSearch/Hint": {
            "title": "$:/language/Shortcuts/Input/AdvancedSearch/Hint",
            "text": "Open the ~AdvancedSearch panel from within the sidebar search field"
        },
        "$:/language/Shortcuts/Input/Accept/Hint": {
            "title": "$:/language/Shortcuts/Input/Accept/Hint",
            "text": "Accept the selected item"
        },
        "$:/language/Shortcuts/Input/AcceptVariant/Hint": {
            "title": "$:/language/Shortcuts/Input/AcceptVariant/Hint",
            "text": "Accept the selected item (variant)"
        },
        "$:/language/Shortcuts/Input/Cancel/Hint": {
            "title": "$:/language/Shortcuts/Input/Cancel/Hint",
            "text": "Clear the input field"
        },
        "$:/language/Shortcuts/Input/Down/Hint": {
            "title": "$:/language/Shortcuts/Input/Down/Hint",
            "text": "Select the next item"
        },
        "$:/language/Shortcuts/Input/Tab-Left/Hint": {
            "title": "$:/language/Shortcuts/Input/Tab-Left/Hint",
            "text": "Select the previous Tab"
        },
        "$:/language/Shortcuts/Input/Tab-Right/Hint": {
            "title": "$:/language/Shortcuts/Input/Tab-Right/Hint",
            "text": "Select the next Tab"
        },
        "$:/language/Shortcuts/Input/Up/Hint": {
            "title": "$:/language/Shortcuts/Input/Up/Hint",
            "text": "Select the previous item"
        },
        "$:/language/Shortcuts/SidebarLayout/Hint": {
            "title": "$:/language/Shortcuts/SidebarLayout/Hint",
            "text": "Change the sidebar layout"
        },
        "$:/language/Switcher/Subtitle/theme": {
            "title": "$:/language/Switcher/Subtitle/theme",
            "text": "Switch Theme"
        },
        "$:/language/Switcher/Subtitle/layout": {
            "title": "$:/language/Switcher/Subtitle/layout",
            "text": "Switch Layout"
        },
        "$:/language/Switcher/Subtitle/language": {
            "title": "$:/language/Switcher/Subtitle/language",
            "text": "Switch Language"
        },
        "$:/language/Switcher/Subtitle/palette": {
            "title": "$:/language/Switcher/Subtitle/palette",
            "text": "Switch Palette"
        },
        "$:/language/SystemTiddler/Tooltip": {
            "title": "$:/language/SystemTiddler/Tooltip",
            "text": "This is a system tiddler"
        },
        "$:/language/SystemTiddlers/Include/Prompt": {
            "title": "$:/language/SystemTiddlers/Include/Prompt",
            "text": "Include system tiddlers"
        },
        "$:/language/TagManager/Colour/Heading": {
            "title": "$:/language/TagManager/Colour/Heading",
            "text": "Colour"
        },
        "$:/language/TagManager/Count/Heading": {
            "title": "$:/language/TagManager/Count/Heading",
            "text": "Count"
        },
        "$:/language/TagManager/Icon/Heading": {
            "title": "$:/language/TagManager/Icon/Heading",
            "text": "Icon"
        },
        "$:/language/TagManager/Icons/None": {
            "title": "$:/language/TagManager/Icons/None",
            "text": "None"
        },
        "$:/language/TagManager/Info/Heading": {
            "title": "$:/language/TagManager/Info/Heading",
            "text": "Info"
        },
        "$:/language/TagManager/Tag/Heading": {
            "title": "$:/language/TagManager/Tag/Heading",
            "text": "Tag"
        },
        "$:/language/Tiddler/DateFormat": {
            "title": "$:/language/Tiddler/DateFormat",
            "text": "DDth MMM YYYY at hh12:0mmam"
        },
        "$:/language/UnsavedChangesWarning": {
            "title": "$:/language/UnsavedChangesWarning",
            "text": "You have unsaved changes in TiddlyWiki"
        },
        "$:/language/Yes": {
            "title": "$:/language/Yes",
            "text": "Yes"
        },
        "$:/language/Modals/Download": {
            "title": "$:/language/Modals/Download",
            "subtitle": "Download changes",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "https://tiddlywiki.com/static/DownloadingChanges.html",
            "text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
        },
        "$:/language/Modals/SaveInstructions": {
            "title": "$:/language/Modals/SaveInstructions",
            "subtitle": "Save your work",
            "footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
            "help": "https://tiddlywiki.com/static/SavingChanges.html",
            "text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
        },
        "$:/config/NewJournal/Title": {
            "title": "$:/config/NewJournal/Title",
            "text": "DDth MMM YYYY"
        },
        "$:/config/NewJournal/Text": {
            "title": "$:/config/NewJournal/Text",
            "text": ""
        },
        "$:/config/NewJournal/Tags": {
            "title": "$:/config/NewJournal/Tags",
            "text": "Journal\n"
        },
        "$:/language/Notifications/Save/Done": {
            "title": "$:/language/Notifications/Save/Done",
            "text": "Saved wiki"
        },
        "$:/language/Notifications/Save/Starting": {
            "title": "$:/language/Notifications/Save/Starting",
            "text": "Starting to save wiki"
        },
        "$:/language/Notifications/CopiedToClipboard/Succeeded": {
            "title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
            "text": "Copied to clipboard!"
        },
        "$:/language/Notifications/CopiedToClipboard/Failed": {
            "title": "$:/language/Notifications/CopiedToClipboard/Failed",
            "text": "Failed to copy to clipboard!"
        },
        "$:/language/Search/DefaultResults/Caption": {
            "title": "$:/language/Search/DefaultResults/Caption",
            "text": "List"
        },
        "$:/language/Search/Filter/Caption": {
            "title": "$:/language/Search/Filter/Caption",
            "text": "Filter"
        },
        "$:/language/Search/Filter/Hint": {
            "title": "$:/language/Search/Filter/Hint",
            "text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
        },
        "$:/language/Search/Filter/Matches": {
            "title": "$:/language/Search/Filter/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches": {
            "title": "$:/language/Search/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Matches/All": {
            "title": "$:/language/Search/Matches/All",
            "text": "All matches:"
        },
        "$:/language/Search/Matches/Title": {
            "title": "$:/language/Search/Matches/Title",
            "text": "Title matches:"
        },
        "$:/language/Search/Search": {
            "title": "$:/language/Search/Search",
            "text": "Search"
        },
        "$:/language/Search/Search/TooShort": {
            "title": "$:/language/Search/Search/TooShort",
            "text": "Search text too short"
        },
        "$:/language/Search/Shadows/Caption": {
            "title": "$:/language/Search/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/Search/Shadows/Hint": {
            "title": "$:/language/Search/Shadows/Hint",
            "text": "Search for shadow tiddlers"
        },
        "$:/language/Search/Shadows/Matches": {
            "title": "$:/language/Search/Shadows/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/Standard/Caption": {
            "title": "$:/language/Search/Standard/Caption",
            "text": "Standard"
        },
        "$:/language/Search/Standard/Hint": {
            "title": "$:/language/Search/Standard/Hint",
            "text": "Search for standard tiddlers"
        },
        "$:/language/Search/Standard/Matches": {
            "title": "$:/language/Search/Standard/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/Search/System/Caption": {
            "title": "$:/language/Search/System/Caption",
            "text": "System"
        },
        "$:/language/Search/System/Hint": {
            "title": "$:/language/Search/System/Hint",
            "text": "Search for system tiddlers"
        },
        "$:/language/Search/System/Matches": {
            "title": "$:/language/Search/System/Matches",
            "text": "//<small><<resultCount>> matches</small>//"
        },
        "$:/language/SideBar/All/Caption": {
            "title": "$:/language/SideBar/All/Caption",
            "text": "All"
        },
        "$:/language/SideBar/Contents/Caption": {
            "title": "$:/language/SideBar/Contents/Caption",
            "text": "Contents"
        },
        "$:/language/SideBar/Drafts/Caption": {
            "title": "$:/language/SideBar/Drafts/Caption",
            "text": "Drafts"
        },
        "$:/language/SideBar/Explorer/Caption": {
            "title": "$:/language/SideBar/Explorer/Caption",
            "text": "Explorer"
        },
        "$:/language/SideBar/Missing/Caption": {
            "title": "$:/language/SideBar/Missing/Caption",
            "text": "Missing"
        },
        "$:/language/SideBar/More/Caption": {
            "title": "$:/language/SideBar/More/Caption",
            "text": "More"
        },
        "$:/language/SideBar/Open/Caption": {
            "title": "$:/language/SideBar/Open/Caption",
            "text": "Open"
        },
        "$:/language/SideBar/Orphans/Caption": {
            "title": "$:/language/SideBar/Orphans/Caption",
            "text": "Orphans"
        },
        "$:/language/SideBar/Recent/Caption": {
            "title": "$:/language/SideBar/Recent/Caption",
            "text": "Recent"
        },
        "$:/language/SideBar/Shadows/Caption": {
            "title": "$:/language/SideBar/Shadows/Caption",
            "text": "Shadows"
        },
        "$:/language/SideBar/System/Caption": {
            "title": "$:/language/SideBar/System/Caption",
            "text": "System"
        },
        "$:/language/SideBar/Tags/Caption": {
            "title": "$:/language/SideBar/Tags/Caption",
            "text": "Tags"
        },
        "$:/language/SideBar/Tags/Untagged/Caption": {
            "title": "$:/language/SideBar/Tags/Untagged/Caption",
            "text": "untagged"
        },
        "$:/language/SideBar/Tools/Caption": {
            "title": "$:/language/SideBar/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/SideBar/Types/Caption": {
            "title": "$:/language/SideBar/Types/Caption",
            "text": "Types"
        },
        "$:/SiteSubtitle": {
            "title": "$:/SiteSubtitle",
            "text": "a non-linear personal web notebook"
        },
        "$:/SiteTitle": {
            "title": "$:/SiteTitle",
            "text": "My ~TiddlyWiki"
        },
        "$:/language/Snippets/ListByTag": {
            "title": "$:/language/Snippets/ListByTag",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "List of tiddlers by tag",
            "text": "<<list-links \"[tag[task]sort[title]]\">>\n"
        },
        "$:/language/Snippets/MacroDefinition": {
            "title": "$:/language/Snippets/MacroDefinition",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Macro definition",
            "text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
        },
        "$:/language/Snippets/Table4x3": {
            "title": "$:/language/Snippets/Table4x3",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table with 4 columns by 3 rows",
            "text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
        },
        "$:/language/Snippets/TableOfContents": {
            "title": "$:/language/Snippets/TableOfContents",
            "tags": "$:/tags/TextEditor/Snippet",
            "caption": "Table of Contents",
            "text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
        },
        "$:/language/ThemeTweaks/ThemeTweaks": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks",
            "text": "Theme Tweaks"
        },
        "$:/language/ThemeTweaks/ThemeTweaks/Hint": {
            "title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
            "text": "You can tweak certain aspects of the ''Vanilla'' theme."
        },
        "$:/language/ThemeTweaks/Options": {
            "title": "$:/language/ThemeTweaks/Options",
            "text": "Options"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout",
            "text": "Sidebar layout"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
            "text": "Fixed story, fluid sidebar"
        },
        "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
            "title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
            "text": "Fluid story, fixed sidebar"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles",
            "text": "Sticky titles"
        },
        "$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
            "title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
            "text": "Causes tiddler titles to \"stick\" to the top of the browser window"
        },
        "$:/language/ThemeTweaks/Options/CodeWrapping": {
            "title": "$:/language/ThemeTweaks/Options/CodeWrapping",
            "text": "Wrap long lines in code blocks"
        },
        "$:/language/ThemeTweaks/Settings": {
            "title": "$:/language/ThemeTweaks/Settings",
            "text": "Settings"
        },
        "$:/language/ThemeTweaks/Settings/FontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/FontFamily",
            "text": "Font family"
        },
        "$:/language/ThemeTweaks/Settings/CodeFontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
            "text": "Code font family"
        },
        "$:/language/ThemeTweaks/Settings/EditorFontFamily": {
            "title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
            "text": "Editor font family"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImage": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
            "text": "Page background image"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
            "text": "Page background image attachment"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
            "text": "Scroll with tiddlers"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
            "text": "Fixed to window"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
            "text": "Page background image size"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
            "text": "Auto"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
            "text": "Cover"
        },
        "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
            "title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
            "text": "Contain"
        },
        "$:/language/ThemeTweaks/Metrics": {
            "title": "$:/language/ThemeTweaks/Metrics",
            "text": "Sizes"
        },
        "$:/language/ThemeTweaks/Metrics/FontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/FontSize",
            "text": "Font size"
        },
        "$:/language/ThemeTweaks/Metrics/LineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/LineHeight",
            "text": "Line height"
        },
        "$:/language/ThemeTweaks/Metrics/BodyFontSize": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
            "text": "Font size for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
            "title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
            "text": "Line height for tiddler body"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
            "text": "Story left position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
            "text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop",
            "text": "Story top position"
        },
        "$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
            "text": "how far the top margin of the story river<br>is from the top of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight",
            "text": "Story right"
        },
        "$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
            "text": "how far the left margin of the sidebar <br>is from the left of the page"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
            "text": "Story width"
        },
        "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
            "text": "the overall width of the story river"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
            "text": "Tiddler width"
        },
        "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
            "text": "within the story river"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
            "text": "Sidebar breakpoint"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
            "text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
            "text": "Sidebar width"
        },
        "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
            "title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
            "text": "the width of the sidebar in fluid-fixed layout"
        },
        "$:/language/TiddlerInfo/Advanced/Caption": {
            "title": "$:/language/TiddlerInfo/Advanced/Caption",
            "text": "Advanced"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
            "text": "none"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
            "text": "Plugin Details"
        },
        "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
            "text": "This plugin contains the following shadow tiddlers:"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
            "text": "Shadow Status"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
            "text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
            "text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
        },
        "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
            "title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
            "text": "It is overridden by an ordinary tiddler"
        },
        "$:/language/TiddlerInfo/Fields/Caption": {
            "title": "$:/language/TiddlerInfo/Fields/Caption",
            "text": "Fields"
        },
        "$:/language/TiddlerInfo/List/Caption": {
            "title": "$:/language/TiddlerInfo/List/Caption",
            "text": "List"
        },
        "$:/language/TiddlerInfo/List/Empty": {
            "title": "$:/language/TiddlerInfo/List/Empty",
            "text": "This tiddler does not have a list"
        },
        "$:/language/TiddlerInfo/Listed/Caption": {
            "title": "$:/language/TiddlerInfo/Listed/Caption",
            "text": "Listed"
        },
        "$:/language/TiddlerInfo/Listed/Empty": {
            "title": "$:/language/TiddlerInfo/Listed/Empty",
            "text": "This tiddler is not listed by any others"
        },
        "$:/language/TiddlerInfo/References/Caption": {
            "title": "$:/language/TiddlerInfo/References/Caption",
            "text": "Backlinks"
        },
        "$:/language/TiddlerInfo/References/Empty": {
            "title": "$:/language/TiddlerInfo/References/Empty",
            "text": "No tiddlers link to this one"
        },
        "$:/language/TiddlerInfo/Tagging/Caption": {
            "title": "$:/language/TiddlerInfo/Tagging/Caption",
            "text": "Tagging"
        },
        "$:/language/TiddlerInfo/Tagging/Empty": {
            "title": "$:/language/TiddlerInfo/Tagging/Empty",
            "text": "No tiddlers are tagged with this one"
        },
        "$:/language/TiddlerInfo/Tools/Caption": {
            "title": "$:/language/TiddlerInfo/Tools/Caption",
            "text": "Tools"
        },
        "$:/language/Docs/Types/application/javascript": {
            "title": "$:/language/Docs/Types/application/javascript",
            "description": "JavaScript code",
            "name": "application/javascript",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/application/json": {
            "title": "$:/language/Docs/Types/application/json",
            "description": "JSON data",
            "name": "application/json",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/application/x-tiddler-dictionary": {
            "title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
            "description": "Data dictionary",
            "name": "application/x-tiddler-dictionary",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/image/gif": {
            "title": "$:/language/Docs/Types/image/gif",
            "description": "GIF image",
            "name": "image/gif",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/jpeg": {
            "title": "$:/language/Docs/Types/image/jpeg",
            "description": "JPEG image",
            "name": "image/jpeg",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/png": {
            "title": "$:/language/Docs/Types/image/png",
            "description": "PNG image",
            "name": "image/png",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/svg+xml": {
            "title": "$:/language/Docs/Types/image/svg+xml",
            "description": "Structured Vector Graphics image",
            "name": "image/svg+xml",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/image/x-icon": {
            "title": "$:/language/Docs/Types/image/x-icon",
            "description": "ICO format icon file",
            "name": "image/x-icon",
            "group": "Image",
            "group-sort": "1"
        },
        "$:/language/Docs/Types/text/css": {
            "title": "$:/language/Docs/Types/text/css",
            "description": "Static stylesheet",
            "name": "text/css",
            "group": "Developer",
            "group-sort": "2"
        },
        "$:/language/Docs/Types/text/html": {
            "title": "$:/language/Docs/Types/text/html",
            "description": "HTML markup",
            "name": "text/html",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/plain": {
            "title": "$:/language/Docs/Types/text/plain",
            "description": "Plain text",
            "name": "text/plain",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/vnd.tiddlywiki": {
            "title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
            "description": "TiddlyWiki 5",
            "name": "text/vnd.tiddlywiki",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/language/Docs/Types/text/x-tiddlywiki": {
            "title": "$:/language/Docs/Types/text/x-tiddlywiki",
            "description": "TiddlyWiki Classic",
            "name": "text/x-tiddlywiki",
            "group": "Text",
            "group-sort": "0"
        },
        "$:/languages/en-GB/icon": {
            "title": "$:/languages/en-GB/icon",
            "type": "image/svg+xml",
            "text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
        },
        "$:/languages/en-GB": {
            "title": "$:/languages/en-GB",
            "name": "en-GB",
            "description": "English (British)",
            "author": "JeremyRuston",
            "core-version": ">=5.0.0\"",
            "text": "Stub pseudo-plugin for the default language"
        },
        "$:/core/modules/commander.js": {
            "title": "$:/core/modules/commander.js",
            "text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/commands/build.js": {
            "title": "$:/core/modules/commands/build.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/clearpassword.js": {
            "title": "$:/core/modules/commands/clearpassword.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/deletetiddlers.js": {
            "title": "$:/core/modules/commands/deletetiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/editions.js": {
            "title": "$:/core/modules/commands/editions.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\"    \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/fetch.js": {
            "title": "$:/core/modules/commands/fetch.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = this.commander.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t    var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t    \tdata = [];\n\t    self.commander.write(\"Reading \" + url + \": \");\n\t    response.on(\"data\",function(chunk) {\n\t        data.push(chunk);\n\t        self.commander.write(\".\");\n\t    });\n\t    response.on(\"end\",function() {\n\t        self.commander.write(\"\\n\");\n\t        if(response.statusCode === 200) {\n\t\t        self.processBody(Buffer.concat(data),type,options,url);\n\t\t        callback(null);\n\t        } else {\n\t        \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t        \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t        \t} else {\n\t\t        \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t        \t\t\n\t        \t}\n\t        }\n\t   \t});\n\t   \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t   \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/help.js": {
            "title": "$:/core/modules/commands/help.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/import.js": {
            "title": "$:/core/modules/commands/import.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/init.js": {
            "title": "$:/core/modules/commands/init.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/listen.js": {
            "title": "$:/core/modules/commands/listen.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/load.js": {
            "title": "$:/core/modules/commands/load.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/makelibrary.js": {
            "title": "$:/core/modules/commands/makelibrary.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = $tw.utils.getSubdirectories(folder) || [];\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/output.js": {
            "title": "$:/core/modules/commands/output.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/password.js": {
            "title": "$:/core/modules/commands/password.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/render.js": {
            "title": "$:/core/modules/commands/render.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddler.js": {
            "title": "$:/core/modules/commands/rendertiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/rendertiddlers.js": {
            "title": "$:/core/modules/commands/rendertiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/save.js": {
            "title": "$:/core/modules/commands/save.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savelibrarytiddlers.js": {
            "title": "$:/core/modules/commands/savelibrarytiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <tiddler-filter> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe tiddler filter specifies the plugins to be included.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!self.commander.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddler.js": {
            "title": "$:/core/modules/commands/savetiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savetiddlers.js": {
            "title": "$:/core/modules/commands/savetiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/savewikifolder.js": {
            "title": "$:/core/modules/commands/savewikifolder.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type]  || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\twiki: this.wiki\n\t});\n\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/server.js": {
            "title": "$:/core/modules/commands/server.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/setfield.js": {
            "title": "$:/core/modules/commands/setfield.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/unpackplugin.js": {
            "title": "$:/core/modules/commands/unpackplugin.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/verbose.js": {
            "title": "$:/core/modules/commands/verbose.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n  \" + $tw.boot.logMessages.join(\"\\n  \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/commands/version.js": {
            "title": "$:/core/modules/commands/version.js",
            "text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "command"
        },
        "$:/core/modules/config.js": {
            "title": "$:/core/modules/config.js",
            "text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter:   \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
            "type": "application/javascript",
            "module-type": "config"
        },
        "$:/core/modules/deserializers.js": {
            "title": "$:/core/modules/deserializers.js",
            "text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "tiddlerdeserializer"
        },
        "$:/core/modules/editor/engines/framed.js": {
            "title": "$:/core/modules/editor/engines/framed.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\t\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"},\n\t\t{name: \"focus\",handlerObject: this,handlerMethod: \"handleFocusEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nFramedEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a focus event\n*/\nFramedEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\t\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/engines/simple.js": {
            "title": "$:/core/modules/editor/engines/simple.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\tif(this.widget.editAutoComplete) {\n\t\tthis.domNode.setAttribute(\"autocomplete\",this.widget.editAutoComplete);\n\t}\n\tif(this.widget.isDisabled === \"yes\") {\n\t\tthis.domNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.updateDomNodeText(text);\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nUpdate the DomNode with the new text\n*/\nSimpleEngine.prototype.updateDomNodeText = function(text) {\n\tthis.domNode.value = text;\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus  = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\tif(this.widget.editInputActions) {\n\t\tthis.widget.invokeActionString(this.widget.editInputActions);\n\t}\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editCancelPopups) {\n\t\t$tw.popup.cancel(0);\n\t}\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/factory.js": {
            "title": "$:/core/modules/editor/factory.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\") === \"yes\";\n\t\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\t\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\t\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup ||  changedAttributes.rows || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE] || changedAttributes.disabled) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if (changedTiddlers[this.editRefreshTitle]) {\n\t\t\tthis.engine.updateDomNodeText(this.getEditInfo().value);\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t    clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t    el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/editor/operations/bitmap/clear.js": {
            "title": "$:/core/modules/editor/operations/bitmap/clear.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/bitmap/resize.js": {
            "title": "$:/core/modules/editor/operations/bitmap/resize.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/bitmap/rotate-left.js": {
            "title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "bitmapeditoroperation"
        },
        "$:/core/modules/editor/operations/text/excise.js": {
            "title": "$:/core/modules/editor/operations/text/excise.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ?  [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/make-link.js": {
            "title": "$:/core/modules/editor/operations/text/make-link.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/prefix-lines.js": {
            "title": "$:/core/modules/editor/operations/text/prefix-lines.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\tvar targetCount = parseInt(event.paramObject.count + \"\",10);\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,targetCount);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== targetCount) {\n\t\t\t// Apply the prefix\n\t\t\tline =  prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-all.js": {
            "title": "$:/core/modules/editor/operations/text/replace-all.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/replace-selection.js": {
            "title": "$:/core/modules/editor/operations/text/replace-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/save-selection.js": {
            "title": "$:/core/modules/editor/operations/text/save-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-lines.js": {
            "title": "$:/core/modules/editor/operations/text/wrap-lines.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/editor/operations/text/wrap-selection.js": {
            "title": "$:/core/modules/editor/operations/text/wrap-selection.js",
            "text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "texteditoroperation"
        },
        "$:/core/modules/filterrunprefixes/all.js": {
            "title": "$:/core/modules/filterrunprefixes/all.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/all.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nUnion of sets without de-duplication.\nEquivalent to = filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.all = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.push.apply(results, operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filterrunprefixes/and.js": {
            "title": "$:/core/modules/filterrunprefixes/and.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/and.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nIntersection of sets.\nEquivalent to + filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.and = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\tsource = options.wiki.makeTiddlerIterator(results.toArray());\n\t\tresults.clear();\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filterrunprefixes/else.js": {
            "title": "$:/core/modules/filterrunprefixes/else.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/else.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to ~ filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.else = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length === 0) {\n\t\t\t// Main result so far is empty\n\t\t\tresults.pushTop(operationSubFunction(source,widget));\n\t\t}\n\t};\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filterrunprefixes/except.js": {
            "title": "$:/core/modules/filterrunprefixes/except.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/except.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nDifference of sets.\nEquivalent to - filter run prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.except = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.remove(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filterrunprefixes/filter.js": {
            "title": "$:/core/modules/filterrunprefixes/filter.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/filter.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar resultsToRemove = [];\n\t\t\tresults.each(function(result) {\n\t\t\t\tvar filtered = operationSubFunction(options.wiki.makeTiddlerIterator([result]),widget);\n\t\t\t\tif(filtered.length === 0) {\n\t\t\t\t\tresultsToRemove.push(result);\n\t\t\t\t}\n\t\t\t});\n\t\t\tresults.remove(resultsToRemove);\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filterrunprefixes/intersection.js": {
            "title": "$:/core/modules/filterrunprefixes/intersection.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/intersection.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.intersection = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tif(results.length !== 0) {\n\t\t\tvar secondRunResults = operationSubFunction(source,widget);\n\t\t\tvar firstRunResults = results.toArray();\n\t\t\tresults.clear();\n\t\t\t$tw.utils.each(firstRunResults,function(title) {\n\t\t\t\tif(secondRunResults.indexOf(title) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filterrunprefixes/or.js": {
            "title": "$:/core/modules/filterrunprefixes/or.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/or.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\nEquivalent to a filter run with no prefix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.or = function(operationSubFunction) {\n\treturn function(results,source,widget) {\n\t\tresults.pushTop(operationSubFunction(source,widget));\n\t};\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filterrunprefixes/reduce.js": {
            "title": "$:/core/modules/filterrunprefixes/reduce.js",
            "text": "/*\\\ntitle: $:/core/modules/filterrunprefixes/reduce.js\ntype: application/javascript\nmodule-type: filterrunprefix\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter prefix function\n*/\nexports.reduce = function(operationSubFunction,options) {\n\treturn function(results,source,widget) {\n\t\tif(results.length > 0) {\n\t\t\tvar accumulator = \"\";\n\t\t\tvar index = 0;\n\t\t\tresults.each(function(title) {\n\t\t\t\tvar list = operationSubFunction(options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\t\t\treturn \"\" +  (results.length - 1 - index);\n\t\t\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\treturn widget.getVariable(name);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\tif(list.length > 0) {\n\t\t\t\t\taccumulator = \"\" + list[0];\n\t\t\t\t}\n\t\t\t\t++index;\n\t\t\t});\n\t\t\tresults.clear();\n\t\t\tresults.push(accumulator);\t\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filterrunprefix"
        },
        "$:/core/modules/filters/addprefix.js": {
            "title": "$:/core/modules/filters/addprefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/addsuffix.js": {
            "title": "$:/core/modules/filters/addsuffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/after.js": {
            "title": "$:/core/modules/filters/after.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/all/current.js": {
            "title": "$:/core/modules/filters/all/current.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/missing.js": {
            "title": "$:/core/modules/filters/all/missing.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/orphans.js": {
            "title": "$:/core/modules/filters/all/orphans.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/shadows.js": {
            "title": "$:/core/modules/filters/all/shadows.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tags.js": {
            "title": "$:/core/modules/filters/all/tags.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all/tiddlers.js": {
            "title": "$:/core/modules/filters/all/tiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "allfilteroperator"
        },
        "$:/core/modules/filters/all.js": {
            "title": "$:/core/modules/filters/all.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/backlinks.js": {
            "title": "$:/core/modules/filters/backlinks.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/before.js": {
            "title": "$:/core/modules/filters/before.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/commands.js": {
            "title": "$:/core/modules/filters/commands.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/compare.js": {
            "title": "$:/core/modules/filters/compare.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/compare.js\ntype: application/javascript\nmodule-type: filteroperator\n\nGeneral purpose comparison operator\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.compare = function(source,operator,options) {\n\tvar suffixes = operator.suffixes || [],\n\t\ttype = (suffixes[0] || [])[0],\n\t\tmode = (suffixes[1] || [])[0],\n\t\ttypeFn = $tw.utils.makeCompareFunction(type,{defaultType: \"number\"}),\n\t\tmodeFn = modes[mode] || modes.eq,\n\t\tinvert = operator.prefix === \"!\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tif(modeFn(typeFn(title,operator.operand)) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nvar modes = {\n\t\"eq\": function(value) {return value === 0;},\n\t\"ne\": function(value) {return value !== 0;},\n\t\"gteq\": function(value) {return value >= 0;},\n\t\"gt\": function(value) {return value > 0;},\n\t\"lteq\": function(value) {return value <= 0;},\n\t\"lt\": function(value) {return value < 0;}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/contains.js": {
            "title": "$:/core/modules/filters/contains.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/count.js": {
            "title": "$:/core/modules/filters/count.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/days.js": {
            "title": "$:/core/modules/filters/days.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/duplicateslugs.js": {
            "title": "$:/core/modules/filters/duplicateslugs.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/duplicateslugs.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter function for [duplicateslugs[]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.duplicateslugs = function(source,operator,options) {\n\tvar slugs = Object.create(null), // Hashmap by slug of title, replaced with \"true\" if the duplicate title has already been output\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tvar slug = options.wiki.slugify(title);\n\t\tif(slug in slugs) {\n\t\t\tif(slugs[slug] !== true) {\n\t\t\t\tresults.push(slugs[slug]);\n\t\t\t\tslugs[slug] = true;\n\t\t\t}\n\t\t\tresults.push(title);\n\t\t} else {\n\t\t\tslugs[slug] = title;\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/each.js": {
            "title": "$:/core/modules/filters/each.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/eachday.js": {
            "title": "$:/core/modules/filters/eachday.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editiondescription.js": {
            "title": "$:/core/modules/filters/editiondescription.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/editions.js": {
            "title": "$:/core/modules/filters/editions.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [];\n\tif($tw.node) {\n\t\tvar editionInfo = $tw.utils.getEditionInfo();\n\t\tif(editionInfo) {\n\t\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\t\tresults.push(name);\n\t\t\t});\n\t\t}\n\t\tresults.sort();\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/else.js": {
            "title": "$:/core/modules/filters/else.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/decodeuricomponent.js": {
            "title": "$:/core/modules/filters/decodeuricomponent.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title,(operator.suffix === \"rawunicode\")));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push(CSS.escape(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/enlist.js": {
            "title": "$:/core/modules/filters/enlist.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/field.js": {
            "title": "$:/core/modules/filters/field.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/fields.js": {
            "title": "$:/core/modules/filters/fields.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName,\n\t\tsuffixes = (operator.suffixes || [])[0] || [],\n\t\toperand = $tw.utils.parseStringArray(operator.operand);\n\t\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(suffixes.indexOf(\"include\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? $tw.utils.pushTop(results,fieldName) : \"\";\n\t\t\t\t}\n\t\t\t} else if (suffixes.indexOf(\"exclude\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? \"\" : $tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else if\n\t\t\telse {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else\n\t\t} // if (tiddler)\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/filter.js": {
            "title": "$:/core/modules/filters/filter.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/filter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning those input titles that pass a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.filter = function(source,operator,options) {\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\tresults = [],\n\t\ttarget = operator.prefix !== \"!\";\n\tsource(function(tiddler,title) {\n\t\tvar list = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]));\n\t\tif((list.length > 0) === target) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/format/date.js": {
            "title": "$:/core/modules/filters/format/date.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/format/date.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.date = function(source,operand,options) {\n\tvar results = [];\t\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.formatDateString(value,operand || \"YYYY MM DD 0hh:0mm\"));\n\t\t}\n\t});\t\n\treturn results;\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "formatfilteroperator"
        },
        "$:/core/modules/filters/format/relativedate.js": {
            "title": "$:/core/modules/filters/format/relativedate.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/format/relativedate.js\ntype: application/javascript\nmodule-type: formatfilteroperator\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.relativedate = function(source,operand,options) {\n\tvar results = [];\t\n\tsource(function(tiddler,title) {\n\t\tvar value = $tw.utils.parseDate(title);\n\t\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\t\tresults.push($tw.utils.getRelativeDate((new Date()) - (new Date(value))).description);\n\t\t}\n\t});\t\n\treturn results;\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "formatfilteroperator"
        },
        "$:/core/modules/filters/format.js": {
            "title": "$:/core/modules/filters/format.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/format.js\ntype: application/javascript\nmodule-type: filteroperator\nFilter operator for formatting strings\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar formatFilterOperators;\n\nfunction getFormatFilterOperators() {\n\tif(!formatFilterOperators) {\n\t\tformatFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"formatfilteroperator\",formatFilterOperators);\n\t}\n\treturn formatFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.format = function(source,operator,options) {\n\t// Dispatch to the correct formatfilteroperator\n\tvar formatFilterOperators = getFormatFilterOperators();\n\tif(operator.suffix) {\n\t\tvar formatFilterOperator = formatFilterOperators[operator.suffix];\n\t\tif(formatFilterOperator) {\n\t\t\treturn formatFilterOperator(source,operator.operand,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/FormatFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all unchanged if the suffix is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/get.js": {
            "title": "$:/core/modules/filters/get.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getindex.js": {
            "title": "$:/core/modules/filters/getindex.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/getvariable.js": {
            "title": "$:/core/modules/filters/getvariable.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/has.js": {
            "title": "$:/core/modules/filters/has.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field or index\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if(operator.suffix === \"index\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(options.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && (tiddler.fields[operator.operand].length !== 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/haschanged.js": {
            "title": "$:/core/modules/filters/haschanged.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/indexes.js": {
            "title": "$:/core/modules/filters/indexes.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/insertbefore.js": {
            "title": "$:/core/modules/filters/insertbefore.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/is/binary.js": {
            "title": "$:/core/modules/filters/is/binary.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/binary.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[binary]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.binary = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/blank.js": {
            "title": "$:/core/modules/filters/is/blank.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/current.js": {
            "title": "$:/core/modules/filters/is/current.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/draft.js": {
            "title": "$:/core/modules/filters/is/draft.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/draft.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[draft]] analagous to [has[draft.of]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.draft = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,\"draft.of\")) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,\"draft.of\") && (tiddler.fields[\"draft.of\"].length !== 0)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\t\t\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/image.js": {
            "title": "$:/core/modules/filters/is/image.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/missing.js": {
            "title": "$:/core/modules/filters/is/missing.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/orphan.js": {
            "title": "$:/core/modules/filters/is/orphan.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/shadow.js": {
            "title": "$:/core/modules/filters/is/shadow.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/system.js": {
            "title": "$:/core/modules/filters/is/system.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tag.js": {
            "title": "$:/core/modules/filters/is/tag.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/tiddler.js": {
            "title": "$:/core/modules/filters/is/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is/variable.js": {
            "title": "$:/core/modules/filters/is/variable.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "isfilteroperator"
        },
        "$:/core/modules/filters/is.js": {
            "title": "$:/core/modules/filters/is.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/limit.js": {
            "title": "$:/core/modules/filters/limit.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/links.js": {
            "title": "$:/core/modules/filters/links.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/list.js": {
            "title": "$:/core/modules/filters/list.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listed.js": {
            "title": "$:/core/modules/filters/listed.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/listops.js": {
            "title": "$:/core/modules/filters/listops.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/lookup.js": {
            "title": "$:/core/modules/filters/lookup.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || operator.suffix);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/match.js": {
            "title": "$:/core/modules/filters/match.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/math.js": {
            "title": "$:/core/modules/filters/math.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.power = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.pow(a,b);}\n);\n\nexports.log = makeNumericBinaryOperator(\n\tfunction(a,b) {\n\t\tif(b) {\n\t\t\treturn Math.log(a)/Math.log(b);\n\t\t} else {\n\t\t\treturn Math.log(a);\n\t\t}\n\t}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = $tw.utils.parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericReducingOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [$tw.utils.stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,$tw.utils.parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/minlength.js": {
            "title": "$:/core/modules/filters/minlength.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/modules.js": {
            "title": "$:/core/modules/filters/modules.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/moduletypes.js": {
            "title": "$:/core/modules/filters/moduletypes.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/next.js": {
            "title": "$:/core/modules/filters/next.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/plugintiddlers.js": {
            "title": "$:/core/modules/filters/plugintiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/prefix.js": {
            "title": "$:/core/modules/filters/prefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/previous.js": {
            "title": "$:/core/modules/filters/previous.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/range.js": {
            "title": "$:/core/modules/filters/range.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/reduce.js": {
            "title": "$:/core/modules/filters/reduce.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/reduce.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator evaluates a subfilter for each item, making the running total available in the variable `accumulator`, and the current index available in the variable `index`\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.reduce = function(source,operator,options) {\n\t// Accumulate the list\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Run the filter over each item\n\tvar filterFn = options.wiki.compileFilter(operator.operand),\n\t\taccumulator = operator.operands[1] || \"\";\n\tfor(var index=0; index<results.length; index++) {\n\t\tvar title = results[index],\n\t\t\tlist = filterFn.call(options.wiki,options.wiki.makeTiddlerIterator([title]),{\n\t\t\t\tgetVariable: function(name) {\n\t\t\t\t\tswitch(name) {\n\t\t\t\t\t\tcase \"currentTiddler\":\n\t\t\t\t\t\t\treturn \"\" + title;\n\t\t\t\t\t\tcase \"accumulator\":\n\t\t\t\t\t\t\treturn \"\" + accumulator;\n\t\t\t\t\t\tcase \"index\":\n\t\t\t\t\t\t\treturn \"\" + index;\n\t\t\t\t\t\tcase \"revIndex\":\n\t\t\t\t\t\t\treturn \"\" + (results.length - 1 - index);\n\t\t\t\t\t\tcase \"length\":\n\t\t\t\t\t\t\treturn \"\" + results.length;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\tif(list.length > 0) {\n\t\t\taccumulator = \"\" +  list[0];\n\t\t}\n\t}\n\tif(results.length > 0) {\n\t\treturn [accumulator];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/regexp.js": {
            "title": "$:/core/modules/filters/regexp.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removeprefix.js": {
            "title": "$:/core/modules/filters/removeprefix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/removesuffix.js": {
            "title": "$:/core/modules/filters/removesuffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sameday.js": {
            "title": "$:/core/modules/filters/sameday.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/search.js": {
            "title": "$:/core/modules/filters/search.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/shadowsource.js": {
            "title": "$:/core/modules/filters/shadowsource.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/slugify.js": {
            "title": "$:/core/modules/filters/slugify.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/slugify.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for slugifying a tiddler title\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.slugify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.slugify(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sort.js": {
            "title": "$:/core/modules/filters/sort.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/sortsub.js": {
            "title": "$:/core/modules/filters/sortsub.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/sortsub.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting by a subfilter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sortsub = function(source,operator,options) {\n\t// Compile the subfilter\n\tvar filterFn = options.wiki.compileFilter(operator.operand);\n\t// Collect the input titles and the corresponding sort keys\n\tvar inputTitles = [],\n\t\tsortKeys = [];\n\tsource(function(tiddler,title) {\n\t\tinputTitles.push(title);\n\t\tvar r = filterFn.call(options.wiki,function(iterator) {\n\t\t\titerator(options.wiki.getTiddler(title),title);\n\t\t},{\n\t\t\tgetVariable: function(name) {\n\t\t\t\tif(name === \"currentTiddler\") {\n\t\t\t\t\treturn title;\n\t\t\t\t} else {\n\t\t\t\t\treturn options.widget.getVariable(name);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tsortKeys.push(r[0] || \"\");\n\t});\n\t// Rather than sorting the titles array, we'll sort the indexes so that we can consult both arrays\n\tvar indexes = new Array(inputTitles.length);\n\tfor(var t=0; t<inputTitles.length; t++) {\n\t\tindexes[t] = t;\n\t}\n\t// Sort the indexes\n\tvar compareFn = $tw.utils.makeCompareFunction(operator.suffix,{defaultType: \"string\",invert: operator.prefix === \"!\"});\n\tindexes = indexes.sort(function(a,b) {\n\t\treturn compareFn(sortKeys[a],sortKeys[b]);\n\t});\n\t// Make the results array in order\n\tvar results = [];\n\t$tw.utils.each(indexes,function(index) {\n\t\tresults.push(inputTitles[index]);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/splitbefore.js": {
            "title": "$:/core/modules/filters/splitbefore.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/storyviews.js": {
            "title": "$:/core/modules/filters/storyviews.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/strings.js": {
            "title": "$:/core/modules/filters/strings.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\toperand = (operator.operand || \"\"),\n\t\tfnCalc;\n\tif(suffix === \"prefix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimPrefix(a,b)];}\n\t} else if(suffix === \"suffix\") {\n\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix(a,b)];}\n\t} else {\n\t\tif(operand === \"\") {\n\t\t\tfnCalc = function(a) {return [$tw.utils.trim(a)];}\n\t\t} else {\n\t\t\tfnCalc = function(a,b) {return [$tw.utils.trimSuffix($tw.utils.trimPrefix(a,b),b)];}\n\t\t}\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,fnCalc(title,operand));\n\t});\n\treturn result;\n};\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports[\"enlist-input\"] = makeStringBinaryOperator(\n\tfunction(a,o,s) {return $tw.utils.parseStringArray(\"\" + a,(s === \"raw\"));}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\",operator.suffix || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\tif(result.length === 0) {\n\t\t\treturn [];\n\t\t}\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue) || \"\"];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\t\t\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\t\t\n\treturn result;\n};\n\nexports[\"search-replace\"] = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = operator.suffixes || [],\n\t\tflagSuffix = (suffixes[0] ? (suffixes[0][0] || \"\") : \"\"),\n\t\tflags = (flagSuffix.indexOf(\"g\") !== -1 ? \"g\" : \"\") + (flagSuffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tisRegExp = (suffixes[1] && suffixes[1][0] === \"regexp\") ? true : false,\n\t\tsearchTerm,\n\t\tregExp;\n\t\n\tsource(function(tiddler,title) {\n\t\tif(title && (operator.operands.length > 1)) {\n\t\t\t//Escape regexp characters if the operand is not a regular expression\n\t\t\tsearchTerm = isRegExp ? operator.operand : $tw.utils.escapeRegExp(operator.operand);\n\t\t\ttry {\n\t\t\t\tregExp = new RegExp(searchTerm,flags);\n\t\t\t} catch(ex) {\n\t\t\t\treturn [\"RegExp error: \" + ex];\n\t\t\t}\n\t\t\tresults.push(\n\t\t\t\ttitle.replace(regExp,operator.operands[1])\n\t\t\t);\n\t\t} else {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nexports.pad = function(source,operator,options) {\n\tvar results = [],\n\t\ttargetLength = operator.operand ? parseInt(operator.operand) : 0,\n\t\tfill = operator.operands[1] || \"0\";\n\n\tsource(function(tiddler,title) {\n\t\tif(title && title.length) {\n\t\t\tif(title.length >= targetLength) {\n\t\t\t\tresults.push(title);\n\t\t\t} else {\n\t\t\t\tvar padString = \"\",\n\t\t\t\t\tpadStringLength = targetLength - title.length;\n\t\t\t\twhile (padStringLength > padString.length) {\n\t\t\t\t\tpadString += fill;\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t//make sure we do not exceed the specified length\n\t\t\t\tpadString = padString.slice(0,padStringLength);\n\t\t\t\tif(operator.suffix && (operator.suffix === \"suffix\")) {\n\t\t\t\t\ttitle = title + padString;\n\t\t\t\t} else {\n\t\t\t\t\ttitle = padString + title;\n\t\t\t\t}\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/subfilter.js": {
            "title": "$:/core/modules/filters/subfilter.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/subtiddlerfields.js": {
            "title": "$:/core/modules/filters/subtiddlerfields.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/suffix.js": {
            "title": "$:/core/modules/filters/suffix.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tag.js": {
            "title": "$:/core/modules/filters/tag.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tagging.js": {
            "title": "$:/core/modules/filters/tagging.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/tags.js": {
            "title": "$:/core/modules/filters/tags.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/then.js": {
            "title": "$:/core/modules/filters/then.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/title.js": {
            "title": "$:/core/modules/filters/title.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/untagged.js": {
            "title": "$:/core/modules/filters/untagged.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/variables.js": {
            "title": "$:/core/modules/filters/variables.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/wikiparserrules.js": {
            "title": "$:/core/modules/filters/wikiparserrules.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters/x-listops.js": {
            "title": "$:/core/modules/filters/x-listops.js",
            "text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: false */\n\t\"use strict\";\n\n\t/*\n\tFetch titles from the current list\n\t*/\n\tvar prepare_results = function (source) {\n\tvar results = [];\n\t\tsource(function (tiddler, title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list before the item named in the operand\n\t*/\n\texports.putbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list after the item named in the operand\n\t*/\n\texports.putafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -1) :\n\t\t\tresults.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tReplaces the item named in the operand with a number of items from the tail of the current list\n\t*/\n\texports.replace = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn (index === -1) ?\n\t\t\tresults.slice(0, -count) :\n\t\t\tresults.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the tail of the current list to the head of the list\n\t*/\n\texports.putfirst = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(-count).concat(results.slice(0, -count));\n\t};\n\n\t/*\n\tMoves a number of items from the head of the current list to the tail of the list\n\t*/\n\texports.putlast = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1);\n\t\treturn results.slice(count).concat(results.slice(0, count));\n\t};\n\n\t/*\n\tMoves the item named in the operand a number of places forward or backward in the list\n\t*/\n\texports.move = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,1),\n\t\t\tmarker = results.splice(index, 1),\n\t\t\toffset =  (index + count) > 0 ? index + count : 0;\n\t\treturn results.slice(0, offset).concat(marker).concat(results.slice(offset));\n\t};\n\n\t/*\n\tReturns the items from the current list that are after the item named in the operand\n\t*/\n\texports.allafter = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(index) :\n\t\t\tresults.slice(index + 1);\n\t};\n\n\t/*\n\tReturns the items from the current list that are before the item named in the operand\n\t*/\n\texports.allbefore = function (source, operator) {\n\t\tvar results = prepare_results(source),\n\t\t\tindex = results.indexOf(operator.operand);\n\t\treturn (index === -1) ? [] :\n\t\t\t(operator.suffix) ? results.slice(0, index + 1) :\n\t\t\tresults.slice(0, index);\n\t};\n\n\t/*\n\tAppends the items listed in the operand array to the tail of the current list\n\t*/\n\texports.append = function (source, operator) {\n\t\tvar append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || append.length;\n\t\treturn (append.length === 0) ? results :\n\t\t\t(operator.prefix) ? results.concat(append.slice(-count)) :\n\t\t\tresults.concat(append.slice(0, count));\n\t};\n\n\t/*\n\tPrepends the items listed in the operand array to the head of the current list\n\t*/\n\texports.prepend = function (source, operator) {\n\t\tvar prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = $tw.utils.getInt(operator.suffix,prepend.length);\n\t\treturn (prepend.length === 0) ? results :\n\t\t\t(operator.prefix) ? prepend.slice(-count).concat(results) :\n\t\t\tprepend.slice(0, count).concat(results);\n\t};\n\n\t/*\n\tReturns all items from the current list except the items listed in the operand array\n\t*/\n\texports.remove = function (source, operator) {\n\t\tvar array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n\t\t\tresults = prepare_results(source),\n\t\t\tcount = parseInt(operator.suffix) || array.length,\n\t\t\tp,\n\t\t\tlen,\n\t\t\tindex;\n\t\tlen = array.length - 1;\n\t\tfor (p = 0; p < count; ++p) {\n\t\t\tif (operator.prefix) {\n\t\t\t\tindex = results.indexOf(array[len - p]);\n\t\t\t} else {\n\t\t\t\tindex = results.indexOf(array[p]);\n\t\t\t}\n\t\t\tif (index !== -1) {\n\t\t\t\tresults.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn results;\n\t};\n\n\t/*\n\tReturns all items from the current list sorted in the order of the items in the operand array\n\t*/\n\texports.sortby = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tif (!results || results.length < 2) {\n\t\t\treturn results;\n\t\t}\n\t\tvar lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n\t\tresults.sort(function (a, b) {\n\t\t\treturn lookup.indexOf(a) - lookup.indexOf(b);\n\t\t});\n\t\treturn results;\n\t};\n\n\t/*\n\tRemoves all duplicate items from the current list\n\t*/\n\texports.unique = function (source, operator) {\n\t\tvar results = prepare_results(source);\n\t\tvar set = results.reduce(function (a, b) {\n\t\t\tif (a.indexOf(b) < 0) {\n\t\t\t\ta.push(b);\n\t\t\t}\n\t\t\treturn a;\n\t\t}, []);\n\t\treturn set;\n\t};\n\n\tvar cycleValueInArray = function(results,operands,stepSize) {\n\t\tvar resultsIndex,\n\t\t\tstep = stepSize || 1,\n\t\t\ti = 0,\n\t\t\topLength = operands.length,\n\t\t\tnextOperandIndex;\t\t\n\t\tfor(i; i < opLength; i++) {\n\t\t\tresultsIndex = results.indexOf(operands[i]);\n\t\t\tif(resultsIndex !== -1) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif(resultsIndex !== -1) {\n\t\t\ti = i + step;\n\t\t\tnextOperandIndex = (i < opLength ? i : i - opLength);\n\t\t\tif(operands.length > 1) {\n\t\t\t\tresults.splice(resultsIndex,1,operands[nextOperandIndex]);\n\t\t\t} else {\n\t\t\t\tresults.splice(resultsIndex,1);\n\t\t\t}\n\t\t} else {\n\t\t\tresults.push(operands[0]);\n\t\t}\n\t\treturn results;\t\t\n\t}\n\n\t/*\n\tToggles an item in the current list.\n\t*/\t\n\texports.toggle = function(source,operator) {\n\t\treturn cycleValueInArray(prepare_results(source),operator.operands);\n\t}\n\n\texports.cycle = function(source,operator) {\n\t\tvar results = prepare_results(source),\n\t\t\toperands = (operator.operand.length ? $tw.utils.parseStringArray(operator.operand, \"true\") : [\"\"]),\n\t\t\tstep = $tw.utils.getInt(operator.operands[1]||\"\",1);\n\t\tif(step < 0) {\n\t\t\toperands.reverse();\n\t\t\tstep = Math.abs(step);\n\t\t}\t\n\t\treturn cycleValueInArray(results,operands,step);\n\t}\n\t\n})();\n",
            "type": "application/javascript",
            "module-type": "filteroperator"
        },
        "$:/core/modules/filters.js": {
            "title": "$:/core/modules/filters.js",
            "text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\t\toperator.operands = [];\n\t\tfunction parseOperand(bracketType) {\n\t\t\tvar operand = {};\n\t\t\tswitch (bracketType) {\n\t\t\t\tcase \"{\": // Curly brackets\n\t\t\t\t\toperand.indirect = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"[\": // Square brackets\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"<\": // Angle brackets\n\t\t\t\t\toperand.variable = true;\n\t\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"/\": // regexp brackets\n\t\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\t\tif(rexMatch) {\n\t\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n\t// DEPRECATION WARNING\n\tconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif(nextBracketPos === -1) {\n\t\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t\t}\n\t\t\tif(!operator.regexp) {\n\t\t\t\toperand.text = filterString.substring(p,nextBracketPos);\n\t\t\t\toperator.operands.push(operand);\n\t\t\t}\n\t\t\tp = nextBracketPos + 1;\n\t\t}\n\t\t\n\t\tp = nextBracketPos + 1;\n\t\tparseOperand(bracket);\n\t\t\n\t\t// Check for multiple operands\n\t\twhile(filterString.charAt(p) === \",\") {\n\t\t\tp++;\n\t\t\tif(/^[\\[\\{<\\/]/.test(filterString.substring(p))) {\n\t\t\t\tnextBracketPos = p;\n\t\t\t\tp++;\n\t\t\t\tparseOperand(filterString.charAt(nextBracketPos));\n\t\t\t} else {\n\t\t\t\tthrow \"Missing [ in filter expression\";\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=|\\:(\\w+))?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp = p + operation.prefix.length;\n\t\t\t\tif(match[2]) {\n\t\t\t\t\toperation.namedPrefix = match[2];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(match[3]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[4] || match[5] || match[6]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operands: [{text: match[4] || match[5] || match[6]}]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.getFilterRunPrefixes = function() {\n\tif(!this.filterRunPrefixes) {\n\t\t$tw.Wiki.prototype.filterRunPrefixes = {};\n\t\t$tw.modules.applyMethods(\"filterrunprefix\",this.filterRunPrefixes);\n\t}\n\treturn this.filterRunPrefixes;\n}\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operands = [],\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t$tw.utils.each(operator.operands,function(operand) {\n\t\t\t\t\tif(operand.indirect) {\n\t\t\t\t\t\toperand.value = self.getTextReference(operand.text,\"\",currTiddlerTitle);\n\t\t\t\t\t} else if(operand.variable) {\n\t\t\t\t\t\toperand.value = widget.getVariable(operand.text,{defaultValue: \"\"});\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperand.value = operand.text;\n\t\t\t\t\t}\n\t\t\t\t\toperands.push(operand.value);\n\t\t\t\t});\n\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operands.length > 0 ? operands[0] : undefined,\n\t\t\t\t\t\t\toperands: operands,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\tvar filterRunPrefixes = self.getFilterRunPrefixes();\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tvar options = {wiki: self};\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn filterRunPrefixes[\"or\"](operationSubFunction, options);\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn filterRunPrefixes[\"all\"](operationSubFunction, options);\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn filterRunPrefixes[\"except\"](operationSubFunction, options);\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn filterRunPrefixes[\"and\"](operationSubFunction, options);\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn filterRunPrefixes[\"else\"](operationSubFunction, options);\n\t\t\t\tdefault: \n\t\t\t\t\tif(operation.namedPrefix && filterRunPrefixes[operation.namedPrefix]) {\n\t\t\t\t\t\treturn filterRunPrefixes[operation.namedPrefix](operationSubFunction, options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t\tresults.clear();\n\t\t\t\t\t\t\tresults.push($tw.language.getString(\"Error/FilterRunPrefix\"));\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = new $tw.utils.LinkedList();\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results.toArray();\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/indexers/backlinks-indexer.js": {
            "title": "$:/core/modules/indexers/backlinks-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/backlinks-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers' backlinks\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\n\nfunction BacklinksIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nBacklinksIndexer.prototype.init = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype.rebuild = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype._getLinks = function(tiddler) {\n\tvar parser =  this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\n\tif(parser) {\n\t\treturn this.wiki.extractLinks(parser.tree);\n\t}\n\treturn [];\n}\n\nBacklinksIndexer.prototype.update = function(updateDescriptor) {\n\tif(!this.index) {\n\t\treturn;\n\t}\n\tvar newLinks = [],\n\t    oldLinks = [],\n\t    self = this;\n\tif(updateDescriptor.old.exists) {\n\t\toldLinks = this._getLinks(updateDescriptor.old.tiddler);\n\t}\n\tif(updateDescriptor.new.exists) {\n\t\tnewLinks = this._getLinks(updateDescriptor.new.tiddler);\n\t}\n\n\t$tw.utils.each(oldLinks,function(link) {\n\t\tif(self.index[link]) {\n\t\t\tdelete self.index[link][updateDescriptor.old.tiddler.fields.title];\n\t\t}\n\t});\n\t$tw.utils.each(newLinks,function(link) {\n\t\tif(!self.index[link]) {\n\t\t\tself.index[link] = Object.create(null);\n\t\t}\n\t\tself.index[link][updateDescriptor.new.tiddler.fields.title] = true;\n\t});\n}\n\nBacklinksIndexer.prototype.lookup = function(title) {\n\tif(!this.index) {\n\t\tthis.index = Object.create(null);\n\t\tvar self = this;\n\t\tthis.wiki.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self._getLinks(tiddler);\n\t\t\t$tw.utils.each(links, function(link) {\n\t\t\t\tif(!self.index[link]) {\n\t\t\t\t\tself.index[link] = Object.create(null);\n\t\t\t\t}\n\t\t\t\tself.index[link][title] = true;\n\t\t\t});\n\t\t});\n\t}\n\tif(this.index[title]) {\n\t\treturn Object.keys(this.index[title]);\n\t} else {\n\t\treturn [];\n\t}\n}\n\nexports.BacklinksIndexer = BacklinksIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/indexers/field-indexer.js": {
            "title": "$:/core/modules/indexers/field-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/indexers/tag-indexer.js": {
            "title": "$:/core/modules/indexers/tag-indexer.js",
            "text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\t\t\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\t\t\t\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "indexer"
        },
        "$:/core/modules/info/platform.js": {
            "title": "$:/core/modules/info/platform.js",
            "text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function(updateInfoTiddlersCallback) {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tinfoTiddlerFields.push({title: \"$:/info/startup-timestamp\", text: $tw.utils.stringifyDate(new Date())});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n \t\t// Dark mode through event listener on MediaQueryList\n \t\tvar mqList = window.matchMedia(\"(prefers-color-scheme: dark)\"),\n \t\t\tgetDarkModeTiddler = function() {return {title: \"$:/info/darkmode\", text: mqList.matches ? \"yes\" : \"no\"};};\n \t\tinfoTiddlerFields.push(getDarkModeTiddler());\n \t\tmqList.addListener(function(event) {\n \t\t\tupdateInfoTiddlersCallback([getDarkModeTiddler()]);\n \t\t});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "info"
        },
        "$:/core/modules/keyboard.js": {
            "title": "$:/core/modules/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t   (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t   (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t   (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t   (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getEventModifierKeyDescriptor = function(event) {\n\treturn event.ctrlKey && !event.shiftKey && !event.altKey && !event.metaKey ? \"ctrl\" : \n\t\tevent.shiftKey && !event.ctrlKey && !event.altKey && !event.metaKey ? \"shift\" : \n\t\tevent.ctrlKey && event.shiftKey && !event.altKey && !event.metaKey ? \"ctrl-shift\" : \n\t\tevent.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt\" : \n\t\tevent.altKey && event.shiftKey && !event.ctrlKey && !event.metaKey ? \"alt-shift\" : \n\t\tevent.altKey && event.ctrlKey && !event.shiftKey && !event.metaKey ? \"ctrl-alt\" : \n\t\tevent.altKey && event.shiftKey && event.ctrlKey && !event.metaKey ? \"ctrl-alt-shift\" : \n\t\tevent.metaKey && !event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta\" : \n\t\tevent.metaKey && event.ctrlKey && !event.shiftKey && !event.altKey ? \"meta-ctrl\" :\n\t\tevent.metaKey && event.ctrlKey && event.shiftKey && !event.altKey ? \"meta-ctrl-shift\" :\n\t\tevent.metaKey && event.ctrlKey & event.shiftKey && event.altKey ? \"meta-ctrl-alt-shift\" : \"normal\";\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/language.js": {
            "title": "$:/core/modules/language.js",
            "text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/macros/changecount.js": {
            "title": "$:/core/modules/macros/changecount.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/contrastcolour.js": {
            "title": "$:/core/modules/macros/contrastcolour.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/csvtiddlers.js": {
            "title": "$:/core/modules/macros/csvtiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/displayshortcuts.js": {
            "title": "$:/core/modules/macros/displayshortcuts.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t    return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddler.js": {
            "title": "$:/core/modules/macros/jsontiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/jsontiddlers.js": {
            "title": "$:/core/modules/macros/jsontiddlers.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"spaces\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,spaces) {\n\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/makedatauri.js": {
            "title": "$:/core/modules/macros/makedatauri.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"},\n\t{name: \"_canonical_uri\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type,_canonical_uri) {\n\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/now.js": {
            "title": "$:/core/modules/macros/now.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/qualify.js": {
            "title": "$:/core/modules/macros/qualify.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/resolvepath.js": {
            "title": "$:/core/modules/macros/resolvepath.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/unusedtitle.js": {
            "title": "$:/core/modules/macros/unusedtitle.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"options\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName, options) {\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\treturn this.wiki.generateNewTitle(baseName, options);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/macros/version.js": {
            "title": "$:/core/modules/macros/version.js",
            "text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "macro"
        },
        "$:/core/modules/parsers/audioparser.js": {
            "title": "$:/core/modules/parsers/audioparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/binaryparser.js": {
            "title": "$:/core/modules/parsers/binaryparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar BinaryParser = function(type,text,options) {\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on binary tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!title\"}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to external or internal data URI\n\tif(options._canonical_uri) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: options._canonical_uri\n\t\t};\n\t} else if(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/csvparser.js": {
            "title": "$:/core/modules/parsers/csvparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/htmlparser.js": {
            "title": "$:/core/modules/parsers/htmlparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/imageparser.js": {
            "title": "$:/core/modules/parsers/imageparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/utils/parseutils.js": {
            "title": "$:/core/modules/utils/parseutils.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/parsers/pdfparser.js": {
            "title": "$:/core/modules/parsers/pdfparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/textparser.js": {
            "title": "$:/core/modules/parsers/textparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/videoparser.js": {
            "title": "$:/core/modules/parsers/videoparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/ogg\"] = VideoParser;\nexports[\"video/webm\"] = VideoParser;\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/dash.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"&ndash;\" : \"&mdash;\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/entity.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: &copy;\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/extlink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/heading.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/html.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/html.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/image.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/image.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/import.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/import.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/list.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/list.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"div\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/rules.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/syslink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/table.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/table.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n  <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikirule"
        },
        "$:/core/modules/parsers/wikiparser/wikiparser.js": {
            "title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined  && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t//  Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t//  Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar target;\n\tif(type === \"only\") {\n\t\ttarget = true;\n\t} else if(type === \"except\") {\n\t\ttarget = false;\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif((names.indexOf(ruleArray[t].rule.name) === -1) === target) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "parser"
        },
        "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
            "title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
            "text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/pluginswitcher.js": {
            "title": "$:/core/modules/pluginswitcher.js",
            "text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Read the plugin info for the incoming plugins\n\tvar changes = $tw.wiki.readPluginInfo(plugins);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/saver-handler.js": {
            "title": "$:/core/modules/saver-handler.js",
            "text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && ($tw.config.disableAutoSave || this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\")) {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tvar self = this;\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\t$tw.utils.toggleClass(win.document.body,\"tc-dirty\",self.isDirty());\n\t\t});\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/savers/andtidwiki.js": {
            "title": "$:/core/modules/savers/andtidwiki.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback,options) {\n\tvar filename = options && options.variables ? options.variables.filename : null;\n\tif (method === \"download\") {\n\t\t// Support download\n\t\tif (window.twi.saveDownload) {\n\t\t\ttry {\n\t\t\t\twindow.twi.saveDownload(text,filename);\n\t\t\t} catch(err) {\n\t\t\t\tif (err.message === \"Method not found\") {\n\t\t\t\t\twindow.twi.saveDownload(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar link = document.createElement(\"a\");\n\t\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t\t\tif (filename) {\n\t\t\t    link.setAttribute(\"download\",filename);\n\t\t\t}\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\t} else if (window.twi.saveWiki) {\n\t\t// Direct save in Tiddloid\n\t\twindow.twi.saveWiki(text);\n\t} else {\n\t\t// Get the pathname of this document\n\t\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t\t// Strip the file://\n\t\tif(pathname.indexOf(\"file://\") === 0) {\n\t\t\tpathname = pathname.substr(7);\n\t\t}\n\t\t// Strip any query or location part\n\t\tvar p = pathname.indexOf(\"?\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\tp = pathname.indexOf(\"#\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\t// Save the file\n\t\twindow.twi.saveFile(pathname,text);\n\t}\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/beaker.js": {
            "title": "$:/core/modules/savers/beaker.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/custom.js": {
            "title": "$:/core/modules/savers/custom.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/custom.js\ntype: application/javascript\nmodule-type: saver\n\nLooks for `window.$tw.customSaver` first on the current window, then\non the parent window (of an iframe). If present, the saver must define\n\tsave: function(text,method,callback) { ... }\nand the saver may define\n\tpriority: number\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar findSaver = function(window) {\n\ttry {\n\t\treturn window && window.$tw && window.$tw.customSaver;\n\t} catch (err) {\n\t\t// Catching the exception is the most reliable way to detect cross-origin iframe errors.\n\t\t// For example, instead of saying that `window.parent.$tw` is undefined, Firefox will throw\n\t\t//   Uncaught DOMException: Permission denied to access property \"$tw\" on cross-origin object\n\t\tconsole.log({ msg: \"custom saver is disabled\", reason: err });\n\t\treturn null;\n\t}\n}\nvar saver = findSaver(window) || findSaver(window.parent) || {};\n\nvar CustomSaver = function(wiki) {\n};\n\nCustomSaver.prototype.save = function(text,method,callback) {\n\treturn saver.save(text, method, callback);\n};\n\n/*\nInformation about this saver\n*/\nCustomSaver.prototype.info = {\n\tname: \"custom\",\n\tpriority: saver.priority || 4000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!(saver.save);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new CustomSaver(wiki);\n};\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/download.js": {
            "title": "$:/core/modules/savers/download.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/fsosaver.js": {
            "title": "$:/core/modules/savers/fsosaver.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/gitea.js": {
            "title": "$:/core/modules/savers/gitea.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/gitea.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the gitea\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GiteaSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGiteaSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/Gitea/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"Gitea\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/Gitea/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/Gitea/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/Gitea/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/Gitea/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/Gitea/ServerURL\") || \"https://gitea\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"token \" + password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar use_put = true;\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(sha === \"\"){\n\t\t\t\t\tuse_put = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: endpoint + \"/repos/\" + repo + \"/branches/\" + branch,\n\t\t\t\ttype: \"GET\",\n\t\t\t\theaders: headers,\n\t\t\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\t\t\tif(xhr.status === 404) {\n\t\t\t\t\t\tcallback(\"Please ensure the branch in the Gitea repo exists\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdata[\"branch\"] = branch;\n\t\t\t\t\t\tself.upload(uri + filename, use_put?\"PUT\":\"POST\", headers, data, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\nGiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: method,\n\t\theaders: headers,\n\t\tdata: JSON.stringify(data),\n\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nInformation about this saver\n*/\nGiteaSaver.prototype.info = {\n\tname: \"Gitea\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GiteaSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/github.js": {
            "title": "$:/core/modules/savers/github.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"main\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password),\n\t\t\t\"If-None-Match\": \"\"\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/gitlab.js": {
            "title": "$:/core/modules/savers/gitlab.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/?path=\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')) + \"&branch=\" + encodeURIComponent(branch.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/hyperdrive.js": {
            "title": "$:/core/modules/savers/hyperdrive.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/hyperdrive.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Hyperdrive Protocol (https://hypercore-protocol.org/#hyperdrive) Beaker browser beta-1.0 and later (https://beakerbrowser.com)\nCompatible with beaker >= V1.0.0\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar HyperdriveSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nHyperdriveSaver.prototype.save = function(text,method,callback) {\n\tvar dat = beaker.hyperdrive.drive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Hyperdrive Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Hyperdrive Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nHyperdriveSaver.prototype.info = {\n\tname: \"beaker-1.x\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.beaker && !!beaker.hyperdrive && location.protocol===\"hyper:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new HyperdriveSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/manualdownload.js": {
            "title": "$:/core/modules/savers/manualdownload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/msdownload.js": {
            "title": "$:/core/modules/savers/msdownload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/put.js": {
            "title": "$:/core/modules/savers/put.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyfox.js": {
            "title": "$:/core/modules/savers/tiddlyfox.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/tiddlyie.js": {
            "title": "$:/core/modules/savers/tiddlyie.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/twedit.js": {
            "title": "$:/core/modules/savers/twedit.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/savers/upload.js": {
            "title": "$:/core/modules/savers/upload.js",
            "text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "saver"
        },
        "$:/core/modules/server/authenticators/basic.js": {
            "title": "$:/core/modules/server/authenticators/basic.js",
            "text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve(this.server.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "authenticator"
        },
        "$:/core/modules/server/authenticators/header.js": {
            "title": "$:/core/modules/server/authenticators/header.js",
            "text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\") ? server.get(\"authenticated-user-header\").toLowerCase() : undefined;\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "authenticator"
        },
        "$:/core/modules/server/routes/delete-tiddler.js": {
            "title": "$:/core/modules/server/routes/delete-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-favicon.js": {
            "title": "$:/core/modules/server/routes/get-favicon.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-file.js": {
            "title": "$:/core/modules/server/routes/get-file.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\"),\n\t\tsuppliedFilename = decodeURIComponent(state.params[0]),\n\t\tfilename = path.resolve(state.boot.wikiPath,\"files\",suppliedFilename),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tconsole.log(\"Error accessing file \" + filename + \": \" + err.toString());\n\t\t\tstatus = 404;\n\t\t\tcontent = \"File '\" + suppliedFilename + \"' not found\";\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-index.js": {
            "title": "$:/core/modules/server/routes/get-index.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require(\"zlib\");\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers[\"accept-encoding\"];\n\tif(!acceptEncoding) {\n\t\tacceptEncoding = \"\";\n\t}\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\tresponse.writeHead(200,responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-login-basic.js": {
            "title": "$:/core/modules/server/routes/get-login-basic.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-status.js": {
            "title": "$:/core/modules/server/routes/get-status.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddler-html.js": {
            "title": "$:/core/modules/server/routes/get-tiddler-html.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddler.js": {
            "title": "$:/core/modules/server/routes/get-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.bag = \"default\";\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/get-tiddlers-json.js": {
            "title": "$:/core/modules/server/routes/get-tiddlers-json.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers.json?filter=<filter>\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_FILTER = \"[all[tiddlers]!is[system]sort[title]]\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tvar filter = state.queryParameters.filter || DEFAULT_FILTER;\n\tif(state.wiki.getTiddlerText(\"$:/config/Server/AllowAllExternalFilters\") !== \"yes\") {\n\t\tif(state.wiki.getTiddlerText(\"$:/config/Server/ExternalFilters/\" + filter) !== \"yes\") {\n\t\t\tconsole.log(\"Blocked attempt to GET /recipes/default/tiddlers.json with filter: \" + filter);\n\t\t\tresponse.writeHead(403);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tif(state.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"no\") {\n\t\tfilter += \"+[!is[system]]\";\n\t}\n\tvar excludeFields = (state.queryParameters.exclude || \"text\").split(\",\"),\n\t\ttitles = state.wiki.filterTiddlers(filter);\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\t$tw.utils.each(titles,function(title) {\n\t\tvar tiddler = state.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar tiddlerFields = tiddler.getFieldStrings({exclude: excludeFields});\n\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\ttiddlers.push(tiddlerFields);\n\t\t}\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/routes/put-tiddler.js": {
            "title": "$:/core/modules/server/routes/put-tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
            "type": "application/javascript",
            "module-type": "route"
        },
        "$:/core/modules/server/server.js": {
            "title": "$:/core/modules/server/server.js",
            "text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\tquerystring = require(\"querystring\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.boot = options.boot || $tw.boot;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(state.pathPrefix) {\n\t\t\tif(pathname.substr(0,state.pathPrefix.length) === state.pathPrefix) {\n\t\t\t\tpathname = pathname.substr(state.pathPrefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response,options) {\n\toptions = options || {};\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = options.wiki || self.wiki;\n\tstate.boot = options.boot || self.boot;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\tstate.queryParameters = querystring.parse(state.urlInfo.query);\n\tstate.pathPrefix = options.pathPrefix || this.get(\"path-prefix\") || \"\";\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\tvar self = this;\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t// Warn if required plugins are missing\n\tif(!this.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !this.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Create the server\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\t// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)\n\tserver.on(\"listening\",function() {\n\t\tvar address = server.address();\n\t\t$tw.utils.log(\"Serving on \" + self.protocol + \"://\" + address.address + \":\" + address.port + prefix,\"brown/orange\");\n\t\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t});\n\t// Listen\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "library"
        },
        "$:/core/modules/browser-messaging.js": {
            "title": "$:/core/modules/browser-messaging.js",
            "text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t  iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/commands.js": {
            "title": "$:/core/modules/startup/commands.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/CSSescape.js": {
            "title": "$:/core/modules/startup/CSSescape.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/CSSescape.js\ntype: application/javascript\nmodule-type: startup\n\nPolyfill for CSS.escape()\n\n\\*/\n(function(root,factory){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"css-escape\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n// https://github.com/umdjs/umd/blob/master/returnExports.js\nexports.startup = factory(root);\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\n}));\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/favicon.js": {
            "title": "$:/core/modules/startup/favicon.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",$tw.utils.makeDataUri(tiddler.fields.text,tiddler.fields.type,tiddler.fields._canonical_uri));\n\t}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/info.js": {
            "title": "$:/core/modules/startup/info.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_INFO_PLUGIN = \"$:/temp/info-plugin\";\n\nexports.startup = function() {\n\t// Function to bake the info plugin with new tiddlers\n\tvar updateInfoPlugin = function(tiddlerFieldsArray) {\n\t\t// Get the existing tiddlers\n\t\tvar json = $tw.wiki.getTiddlerData(TITLE_INFO_PLUGIN,{tiddlers: {}});\n\t\t// Add the new ones\n\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\tif(fields && fields.title) {\n\t\t\t\tjson.tiddlers[fields.title] = fields;\n\t\t\t}\n\t\t});\n\t\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \"info\" because ordinary plugins are only registered asynchronously after being loaded dynamically\n\t\tvar fields = {\n\t\t\ttitle: TITLE_INFO_PLUGIN,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"info\",\n\t\t\ttext: JSON.stringify(json,null,$tw.config.preferences.jsonSpaces)\n\t\t};\n\t\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\n\t};\n\t// Collect up the info tiddlers\n\tvar tiddlerFieldsArray = [];\n\t// Give each info module a chance to provide as many info tiddlers as they want as an array, and give them a callback for dynamically updating them\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tArray.prototype.push.apply(tiddlerFieldsArray,moduleExports.getInfoTiddlerFields(updateInfoPlugin));\n\t\t}\n\t});\n\tupdateInfoPlugin(tiddlerFieldsArray);\n\tvar changes = $tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]);\n\t$tw.wiki.registerPluginTiddlers(\"info\",[TITLE_INFO_PLUGIN]);\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/load-modules.js": {
            "title": "$:/core/modules/startup/load-modules.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/password.js": {
            "title": "$:/core/modules/startup/password.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/plugins.js": {
            "title": "$:/core/modules/startup/plugins.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/plugins.js\ntype: application/javascript\nmodule-type: startup\n\nStartup logic concerned with managing plugins\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"plugins\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = \"$:/status/RequireReloadDueToPluginChange\";\n\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = \"$:/config/RegisterPluginType/\";\n\nexports.startup = function() {\n\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"no\"});\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Work out which of the changed tiddlers are plugins that we need to reregister\n\t\tvar changesToProcess = [],\n\t\t\trequireReloadDueToPluginChange = false;\n\t\t$tw.utils.each(Object.keys(changes),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\t\trequiresReload = $tw.wiki.doesPluginRequireReload(title);\n\t\t\tif(requiresReload) {\n\t\t\t\trequireReloadDueToPluginChange = true;\n\t\t\t} else if(tiddler) {\n\t\t\t\tvar pluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields[\"plugin-type\"] || \"\"),\"no\") === \"yes\") {\n\t\t\t\t\tchangesToProcess.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\t// Issue warning if any of the tiddlers require a reload\n\t\tif(requireReloadDueToPluginChange) {\n\t\t\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"yes\"});\n\t\t}\n\t\t// Read or delete the plugin info of the changed tiddlers\n\t\tif(changesToProcess.length > 0) {\n\t\t\tvar changes = $tw.wiki.readPluginInfo(changesToProcess);\n\t\t\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\n\t\t\t\tvar changedShadowTiddlers = {};\n\t\t\t\t// Collect the shadow tiddlers of any deleted plugins\n\t\t\t\t$tw.utils.each(changes.deletedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = true;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// Collect the shadow tiddlers of any modified plugins\n\t\t\t\t$tw.utils.each(changes.modifiedPlugins,function(pluginTitle) {\n\t\t\t\t\tvar pluginInfo = $tw.wiki.getPluginInfo(pluginTitle);\n\t\t\t\t\tif(pluginInfo) {\n\t\t\t\t\t\t$tw.utils.each(Object.keys(pluginInfo.tiddlers),function(title) {\n\t\t\t\t\t\t\tchangedShadowTiddlers[title] = false;\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t// (Re-)register any modified plugins\n\t\t\t\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\n\t\t\t\t// Unregister any deleted plugins\n\t\t\t\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\n\t\t\t\t// Unpack the shadow tiddlers\n\t\t\t\t$tw.wiki.unpackPluginTiddlers();\n\t\t\t\t// Queue change events for the changed shadow tiddlers\n\t\t\t\t$tw.utils.each(Object.keys(changedShadowTiddlers),function(title) {\n\t\t\t\t\t$tw.wiki.enqueueTiddlerEvent(title,changedShadowTiddlers[title]);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/render.js": {
            "title": "$:/core/modules/startup/render.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/RootTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar THROTTLE_REFRESH_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget, recursionMarker: \"no\"});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n   \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only tiddlers that are throttled have changed\n\t\tvar onlyThrottledTiddlersHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !(tiddler.hasField(\"draft.of\") || tiddler.hasField(\"throttle.refresh\"))) {\n\t\t\t\tonlyThrottledTiddlersHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyThrottledTiddlersHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = THROTTLE_REFRESH_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n\t// Run any post-render startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/PostRender\");\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/rootwidget.js": {
            "title": "$:/core/modules/startup/rootwidget.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-show-switcher\",function(event) {\n\t\t$tw.modal.display(\"$:/core/ui/SwitcherModal\",{variables: event.paramObject, event: event});\n\t});\t\n\t// Install the notification  mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard  mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup.js": {
            "title": "$:/core/modules/startup.js",
            "text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\t$tw.rootWidget.invokeActionsByTag(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t}\n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/story.js": {
            "title": "$:/core/modules/startup/story.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tvar story = new $tw.Story({\n\t\twiki: $tw.wiki,\n\t\tstoryTitle: DEFAULT_STORY_TITLE,\n\t\thistoryTitle: DEFAULT_HISTORY_TITLE\n\t});\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\tstory.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\tstory.addToHistory(storyList[0]);\n\t\t}\t\t\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/startup/windows.js": {
            "title": "$:/core/modules/startup/windows.js",
            "text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\n$tw.windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t    srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\t$tw.windows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete $tw.windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t\tsrcWindow.document.documentElement.addEventListener(\"click\",$tw.popup,true);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each($tw.windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "startup"
        },
        "$:/core/modules/story.js": {
            "title": "$:/core/modules/story.js",
            "text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/storyviews/classic.js": {
            "title": "$:/core/modules/storyviews/classic.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\t\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom:  currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/pop.js": {
            "title": "$:/core/modules/storyviews/pop.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/storyviews/zoomin.js": {
            "title": "$:/core/modules/storyviews/zoomin.js",
            "text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx =  zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty =  zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "storyview"
        },
        "$:/core/modules/syncer.js": {
            "title": "$:/core/modules/syncer.js",
            "text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \"sync adaptor\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSyncDisableLazyLoading = \"$:/config/SyncDisableLazyLoading\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.titleSyncThrottleInterval = \"$:/config/SyncThrottleInterval\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.errorRetryInterval = 5 * 1000; // Interval to retry after an error\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Save parameters\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\"\"),10) || this.throttleInterval;\n\tthis.errorRetryInterval = options.errorRetryInterval || this.errorRetryInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\")  + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging,\n\t\tsaveHistory: true\n\t});\n\t// Make another logger for connection errors\n\tthis.loggerConnection = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\")  + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\") + \"-connection\",{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging\n\t});\n\t// Ask the syncadaptor to use the main logger\n\tif(this.syncadaptor.setLoggerSaveBuffer) {\n\t\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\tthis.titlesToBeLoaded = {}; // Hashmap of titles of tiddlers that need loading from the server\n\tthis.titlesHaveBeenLazyLoaded = {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\n\t// Timers\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Number of outstanding requests\n\tthis.numTasksInProgress = 0;\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Filter the changes to just include ones that are being synced\n\t\tvar filteredChanges = self.getSyncedTiddlers(function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t\tif(filteredChanges.length > 0) {\n\t\t\tself.processTaskQueue();\n\t\t} else {\n\t\t\t// Look for deletions of tiddlers we're already syncing\t\n\t\t\tvar outstandingDeletion = false\n\t\t\t$tw.utils.each(changes,function(change,title,object) {\n\t\t\t\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\n\t\t\t\t\toutstandingDeletion = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(outstandingDeletion) {\n\t\t\t\tself.processTaskQueue();\n\t\t\t}\n\t\t}\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function(event) {\n\t\t\tvar username = event && event.paramObject && event.paramObject.username,\n\t\t\t\tpassword = event && event.paramObject && event.paramObject.password;\n\t\t\tif(username && password) {\n\t\t\t\t// Login with username and password\n\t\t\t\tself.login(username,password,function() {});\n\t\t\t} else {\n\t\t\t\t// No username and password, so we display a prompt\n\t\t\t\tself.handleLoginEvent();\t\t\t\t\n\t\t\t}\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-copy-syncer-logs-to-clipboard\",function() {\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \"\\n\\nLog:\\n\" + self.logger.getBuffer());\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI && this.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) !== \"yes\") {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nShow a generic network error alert\n*/\nSyncer.prototype.displayError = function(msg,err) {\n\tif(err === ($tw.language.getString(\"Error/XMLHttpRequest\") + \": 0\")) {\n\t\tthis.loggerConnection.alert($tw.language.getString(\"Error/NetworkErrorAlert\"));\n\t\tthis.logger.log(msg + \":\",err);\n\t} else {\n\t\tthis.logger.alert(msg + \":\",err);\n\t}\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getSyncedTiddlers = function(source) {\n\treturn this.filterFn.call(this.wiki,source);\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getTiddlerRevision = function(title) {\n\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\n\t\treturn this.syncadaptor.getTiddlerRevision(title);\n\t} else {\n\t\treturn this.wiki.getTiddler(title).fields.revision;\t\n\t} \n};\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\t// \"revision\" is the revision of the tiddler last seen on the server, and \"changecount\" is the corresponding local changecount\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.getSyncedTiddlers();\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tself.tiddlerInfo[title] = {\n\t\t\t\trevision: self.getTiddlerRevision(title),\n\t\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t\t};\n\t\t}\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\tthis.logger.log(\"Checking dirty status\");\n\t// Check tiddlers that are in the store and included in the filter function\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(this.wiki.tiddlerExists(title)) {\n\t\t\tif(tiddlerInfo) {\n\t\t\t\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\n\t\t\t\tif(this.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the tiddler isn't known on the server then it needs to be saved to the server\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\t// Check tiddlers that are known from the server but not currently in the store\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\tif(!this.wiki.tiddlerExists(titles[index])) {\n\t\t\t// There must be a pending delete\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\tvar dirty = this.isDirty();\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",dirty);\n\t\tif(!dirty) {\n\t\t\tthis.loggerConnection.clearAlerts();\n\t\t}\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: this.getTiddlerRevision(tiddlerFields.title),\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\t// Set the various status tiddlers\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\t\tif(isLoggedIn) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tvar self = this,\n\t\tcancelNextSync = function() {\n\t\t\tif(self.pollTimerId) {\n\t\t\t\tclearTimeout(self.pollTimerId);\n\t\t\t\tself.pollTimerId = null;\n\t\t\t}\n\t\t},\n\t\ttriggerNextSync = function() {\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t},\n\t\tsyncSystemFromServer = (self.wiki.getTiddlerText(\"$:/config/SyncSystemTiddlersFromServer\") === \"yes\" ? true : false);\n\tif(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) {\n\t\tthis.logger.log(\"Retrieving updated tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getUpdatedTiddlers(self,function(err,updates) {\n\t\t\ttriggerNextSync();\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(updates) {\n\t\t\t\t$tw.utils.each(updates.modifications,function(title) {\n\t\t\t\t\tself.titlesToBeLoaded[title] = true;\n\t\t\t\t});\n\t\t\t\t$tw.utils.each(updates.deletions,function(title) {\n\t\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(updates.modifications.length > 0 || updates.deletions.length > 0) {\n\t\t\t\t\tself.processTaskQueue();\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t} else if(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\ttriggerNextSync();\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep track of which tiddlers we already know about have been reported this time\n\t\t\tvar previousTitles = Object.keys(self.tiddlerInfo);\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.tiddlerExists(tiddlerFields.title) && self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null,\n\t\t\t\t\tindexInPreviousTitles = previousTitles.indexOf(tiddlerFields.title);\n\t\t\t\tif(indexInPreviousTitles !== -1) {\n\t\t\t\t\tpreviousTitles.splice(indexInPreviousTitles,1);\n\t\t\t\t}\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Only load the skinny version if we don't already have a fat version of the tiddler\n\t\t\t\t\tif(!tiddler || tiddler.fields.text === undefined) {\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\tself.titlesToBeLoaded[tiddlerFields.title] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Delete any tiddlers that were previously reported but missing this time\n\t\t\t$tw.utils.each(previousTitles,function(title) {\n\t\t\t\tif(syncSystemFromServer || !self.wiki.isSystemTiddler(title)) {\n\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t});\n\t\t\tself.processTaskQueue();\n\t\t});\n\t}\n};\n\n/*\nForce load a tiddler from the server\n*/\nSyncer.prototype.enqueueLoadTiddler = function(title) {\n\tthis.titlesToBeLoaded[title] = true;\n\tthis.processTaskQueue();\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Ignore if the syncadaptor doesn't handle it\n\tif(!this.syncadaptor.supportsLazyLoading) {\n\t\treturn;\n\t}\n\t// Don't lazy load the same tiddler twice\n\tif(!this.titlesHaveBeenLazyLoaded[title]) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.getSyncedTiddlers().indexOf(title) !== -1) {\n\t\t\t// Mark the tiddler as needing loading, and having already been lazily loaded\n\t\t\tthis.titlesToBeLoaded[title] = true;\n\t\t\tthis.titlesHaveBeenLazyLoaded[title] = true;\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!err && !isLoggedIn) {\n\t\t\tif(self.syncadaptor && self.syncadaptor.displayLoginPrompt) {\n\t\t\t\tself.syncadaptor.displayLoginPrompt(self);\n\t\t\t} else {\n\t\t\t\tself.displayLoginPrompt();\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nDispay a password prompt\n*/\nSyncer.prototype.displayLoginPrompt = function() {\n\tvar self = this;\n\tvar promptInfo = $tw.passwordPrompt.createPrompt({\n\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\tcallback: function(data) {\n\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\tself.syncFromServer();\n\t\t\t});\n\t\t\treturn true; // Get rid of the password prompt\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(err,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nProcess the next task\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing\n\t// a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(typeof task === \"object\" && task !== null) {\n\t\t\tthis.numTasksInProgress += 1;\n\t\t\ttask.run(function(err) {\n\t\t\t\tself.numTasksInProgress -= 1;\n\t\t\t\tif(err) {\n\t\t\t\t\tself.displayError(\"Sync error while processing \" + task.type + \" of '\" + task.title + \"'\",err);\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\tself.triggerTimeout(self.errorRetryInterval);\n\t\t\t\t} else {\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\t// Process the next task\n\t\t\t\t\tself.processTaskQueue.call(self);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// No task is ready so update the status\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// And trigger a timeout if there is a pending task\n\t\t\tif(task === true) {\n\t\t\t\tthis.triggerTimeout();\t\t\t\t\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.updateDirtyStatus();\t\t\n\t}\n};\n\nSyncer.prototype.triggerTimeout = function(interval) {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},interval || self.taskTimerInterval);\n\t}\n};\n\n/*\nChoose the next sync task. We prioritise saves, then deletes, then loads from the server\n\nReturns either a task object, null if there's no upcoming tasks, or the boolean true if there are pending tasks that aren't yet due\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar thresholdLastSaved = (new Date()) - this.throttleInterval,\n\t\thavePending = null;\n\t// First we look for tiddlers that have been modified locally and need saving back to the server\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(tiddler) {\n\t\t\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\n\t\t\tvar hasChanged = !tiddlerInfo || this.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\n\t\t\t\tisReadyToSave = !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved < thresholdLastSaved;\n\t\t\tif(hasChanged) {\n\t\t\t\tif(isReadyToSave) {\n\t\t\t\t\treturn new SaveTiddlerTask(this,title); \t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\thavePending = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Second, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\ttitle = titles[index];\n\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\treturn new DeleteTiddlerTask(this,title);\n\t\t}\n\t}\n\t// Check for tiddlers that need loading\n\ttitle = Object.keys(this.titlesToBeLoaded)[0];\n\tif(title) {\n\t\tdelete this.titlesToBeLoaded[title];\n\t\treturn new LoadTiddlerTask(this,title);\n\t}\n\t// No tasks are ready\n\treturn havePending;\n};\n\nfunction SaveTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"save\";\n}\n\nSaveTiddlerTask.prototype.run = function(callback) {\n\tvar self = this,\n\t\tchangeCount = this.syncer.wiki.getChangeCount(this.title),\n\t\ttiddler = this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\n\tthis.syncer.logger.log(\"Dispatching 'save' task:\",this.title);\n\tif(tiddler) {\n\t\tthis.syncer.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t// If there's an error, exit without changing any internal state\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Adjust the info stored about this tiddler\n\t\t\tself.syncer.tiddlerInfo[self.title] = {\n\t\t\t\tchangeCount: changeCount,\n\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\trevision: revision,\n\t\t\t\ttimestampLastSaved: new Date()\n\t\t\t};\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t},{\n\t\t\ttiddlerInfo: self.syncer.tiddlerInfo[self.title]\n\t\t});\n\t} else {\n\t\tthis.syncer.logger.log(\" Not Dispatching 'save' task:\",this.title,\"tiddler does not exist\");\n\t\t$tw.utils.nextTick(callback(null));\n\t}\n};\n\nfunction DeleteTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"delete\";\n}\n\nDeleteTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'delete' task:\",this.title);\n\tthis.syncer.syncadaptor.deleteTiddler(this.title,function(err) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Remove the info stored about this tiddler\n\t\tdelete self.syncer.tiddlerInfo[self.title];\n\t\tif($tw.boot.files){\n\t\t\t// Remove the tiddler from $tw.boot.files\n\t\t\tdelete $tw.boot.files[self.title];\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t},{\n\t\ttiddlerInfo: self.syncer.tiddlerInfo[this.title]\n\t});\n};\n\nfunction LoadTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"load\";\n}\n\nLoadTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'load' task:\",this.title);\n\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Update the info stored about this tiddler\n\t\tif(tiddlerFields) {\n\t\t\tself.syncer.storeTiddler(tiddlerFields);\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/tiddler.js": {
            "title": "$:/core/modules/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "tiddlermethod"
        },
        "$:/core/modules/upgraders/plugins.js": {
            "title": "$:/core/modules/upgraders/plugins.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin contains JS modules\n\t\t\tvar requiresReload = wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? (wiki.getTiddlerText(\"$:/language/ControlPanel/Plugins/PluginWillRequireReload\") + \" \") : \"\";\n\t\t\tmessages[title] = requiresReload;\n\t\t\tif(incomingTiddler.version) {\n\t\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/system.js": {
            "title": "$:/core/modules/upgraders/system.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/Import\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/upgraders/themetweaks.js": {
            "title": "$:/core/modules/upgraders/themetweaks.js",
            "text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "upgrader"
        },
        "$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
            "text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)if((e=r.charCodeAt(t))<128)o+=String.fromCharCode(e);else if(e>127&&e<2048)o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128);else if(e>55295&&e<57344&&r.length>t+1){var i=e,n=r.charCodeAt(t+1);t++;var d=65536+(i-55296<<10|n-56320);o+=String.fromCharCode(d>>18|240),o+=String.fromCharCode(d>>12&63|128),o+=String.fromCharCode(d>>6&63|128),o+=String.fromCharCode(63&d|128)}else o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128);return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)if((t=r.charCodeAt(o))<128)e+=String.fromCharCode(t),o++;else if(t>191&&t<224)e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2;else if(t>223&&t<240)e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3;else{var i=(7&t)<<18|(63&r.charCodeAt(o+1))<<12|(63&r.charCodeAt(o+2))<<6|63&r.charCodeAt(o+3);e+=String.fromCharCode(55296+(i-65536>>10))+String.fromCharCode(56320+(i-65536&1023)),o+=4}return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var i=0;i<t.length;i++)o[t[i]]=o.require(t[i]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,i,n,d,f,a,h,C=\"\",c=0;c<r.length;)d=(t=r.charCodeAt(c++))>>2,f=(3&t)<<4|(i=r.charCodeAt(c++))>>4,a=(15&i)<<2|(n=r.charCodeAt(c++))>>6,h=63&n,isNaN(i)?a=h=64:isNaN(n)&&(h=64),C+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return C},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,i,n,d,f,a,h=\"\",C=0;C<r.length;)t=o.indexOf(r.charAt(C++))<<2|(d=o.indexOf(r.charAt(C++)))>>4,i=(15&d)<<4|(f=o.indexOf(r.charAt(C++)))>>2,n=(3&f)<<6|(a=o.indexOf(r.charAt(C++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(i)),64!=a&&(h+=String.fromCharCode(n));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
            "type": "application/javascript",
            "title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
            "module-type": "library"
        },
        "$:/core/modules/utils/crypto.js": {
            "title": "$:/core/modules/utils/crypto.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/csv.js": {
            "title": "$:/core/modules/utils/csv.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
            "text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&amp;\").replace(d,\"&lt;\").replace(e,\"&gt;\").replace(f,\"&para;<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
            "type": "application/javascript",
            "title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
            "module-type": "library"
        },
        "$:/core/modules/utils/dom/animations/slide.js": {
            "title": "$:/core/modules/utils/dom/animations/slide.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "animation"
        },
        "$:/core/modules/utils/dom/animator.js": {
            "title": "$:/core/modules/utils/dom/animator.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/browser.js": {
            "title": "$:/core/modules/utils/dom/browser.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/csscolorparser.js": {
            "title": "$:/core/modules/utils/dom/csscolorparser.js",
            "text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n  \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n  \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n  \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n  \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n  \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n  \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n  \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n  \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n  \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n  \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n  \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n  \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n  \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n  \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n  \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n  \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n  \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n  \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n  \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n  \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n  \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n  \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n  \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n  \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n  \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n  \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n  \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n  \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n  \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n  \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n  \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n  \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n  \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n  \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n  \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n  \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n  \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n  \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n  \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n  \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n  \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n  \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n  \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n  \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n  \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n  \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n  \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n  \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n  \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n  \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n  \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n  \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n  \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n  \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n  \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n  \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n  \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n  \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n  \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n  \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n  \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n  \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n  \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n  \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n  \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n  \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n  \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n  \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n  \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n  \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n  \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n  \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n  \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n  \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) {  // Clamp to integer 0 .. 255.\n  i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n  return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) {  // Clamp to float 0.0 .. 1.0.\n  return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) {  // int or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_byte(parseFloat(str) / 100 * 255);\n  return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) {  // float or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_float(parseFloat(str) / 100);\n  return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n  if (h < 0) h += 1;\n  else if (h > 1) h -= 1;\n\n  if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n  if (h * 2 < 1) return m2;\n  if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n  return m1;\n}\n\nfunction parseCSSColor(css_str) {\n  // Remove all whitespace, not compliant, but should just be more accepting.\n  var str = css_str.replace(/ /g, '').toLowerCase();\n\n  // Color keywords (and transparent) lookup.\n  if (str in kCSSColorTable) return kCSSColorTable[str].slice();  // dup.\n\n  // #abc and #abc123 syntax.\n  if (str[0] === '#') {\n    if (str.length === 4) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xfff)) return null;  // Covers NaN.\n      return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n              (iv & 0xf0) | ((iv & 0xf0) >> 4),\n              (iv & 0xf) | ((iv & 0xf) << 4),\n              1];\n    } else if (str.length === 7) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xffffff)) return null;  // Covers NaN.\n      return [(iv & 0xff0000) >> 16,\n              (iv & 0xff00) >> 8,\n              iv & 0xff,\n              1];\n    }\n\n    return null;\n  }\n\n  var op = str.indexOf('('), ep = str.indexOf(')');\n  if (op !== -1 && ep + 1 === str.length) {\n    var fname = str.substr(0, op);\n    var params = str.substr(op+1, ep-(op+1)).split(',');\n    var alpha = 1;  // To allow case fallthrough.\n    switch (fname) {\n      case 'rgba':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'rgb':\n        if (params.length !== 3) return null;\n        return [parse_css_int(params[0]),\n                parse_css_int(params[1]),\n                parse_css_int(params[2]),\n                alpha];\n      case 'hsla':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'hsl':\n        if (params.length !== 3) return null;\n        var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n        // NOTE(deanm): According to the CSS spec s/l should only be\n        // percentages, but we don't bother and let float or percentage.\n        var s = parse_css_float(params[1]);\n        var l = parse_css_float(params[2]);\n        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n        var m1 = l * 2 - m2;\n        return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n                alpha];\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom.js": {
            "title": "$:/core/modules/utils/dom.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.hasAttribute && el.hasAttribute(\"class\") && el.getAttribute(\"class\").split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = (el.getAttribute(\"class\") || \"\").split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.setAttribute(\"class\",c.join(\" \"));\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n    // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/dragndrop.js": {
            "title": "$:/core/modules/utils/dom/dragndrop.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t    \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t    \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/http.js": {
            "title": "$:/core/modules/utils/dom/http.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\turl = options.url,\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\thasHeader = function(targetHeader) {\n\t\t\ttargetHeader = targetHeader.toLowerCase();\n\t\t\tvar result = false;\n\t\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\t\tif(headerTitle.toLowerCase() === targetHeader) {\n\t\t\t\t\tresult = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn result;\n\t\t},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tif(type === \"GET\" || type === \"HEAD\") {\n\t\t\t\turl += \"?\" + results.join(\"&\");\n\t\t\t} else {\n\t\t\t\tdata = results.join(\"&\");\n\t\t\t}\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !hasHeader(\"Content-Type\")) {\n\t\trequest.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!hasHeader(\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/keyboard.js": {
            "title": "$:/core/modules/utils/dom/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/modal.js": {
            "title": "$:/core/modules/utils/dom/modal.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\nvar navigator = require(\"$:/core/modules/widgets/navigator.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({\n\t\t\tcurrentTiddler: title,\n\t\t\t\"tv-story-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-story-list\") : \"\"),\n\t\t\t\"tv-history-list\": (options.event && options.event.widget ? options.event.widget.getVariable(\"tv-history-list\") : \"\")\n\t\t},options.variables);\n\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\tif(tiddler.fields && tiddler.fields.class) {\n\t\t$tw.utils.addClass(wrapper,tiddler.fields.class);\n\t}\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\tvar navigatorTree = {\n\t\t\"type\": \"navigator\",\n\t\t\"attributes\": {\n\t\t\t\"story\": {\n\t\t\t\t\"name\": \"story\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-story-list\"]\n\t\t\t},\n\t\t\t\"history\": {\n\t\t\t\t\"name\": \"history\",\n\t\t\t\t\"type\": \"string\",\n\t\t\t\t\"value\": variables[\"tv-history-list\"]\n\t\t\t}\n\t\t},\n\t\t\"tag\": \"$navigator\",\n\t\t\"isBlock\": true,\n\t\t\"children\": []\n\t};\n\tvar navigatorWidgetNode = new navigator.navigator(navigatorTree, {\n\t\twiki: this.wiki,\n\t\tdocument : this.srcDocument,\n\t\tparentWidget: $tw.rootWidget\n\t});\n\tnavigatorWidgetNode.render(modalBody,null);\n\t\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: navigatorWidgetNode,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/notifier.js": {
            "title": "$:/core/modules/utils/dom/notifier.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/popup.js": {
            "title": "$:/core/modules/utils/dom/popup.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tif(popup.noStateReference) {\n\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t} else {\n\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n        \t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/dom/scroller.js": {
            "title": "$:/core/modules/utils/dom/scroller.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\tif(event.paramObject && event.paramObject.selector) {\n\t\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t\t} else {\n\t\t\tthis.scrollIntoView(event.target);\t\t\t\n\t\t}\n\t\treturn false; // Event was handled\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t    srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nPageScroller.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\t\t\n\t}\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/edition-info.js": {
            "title": "$:/core/modules/utils/edition-info.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/fakedom.js": {
            "title": "$:/core/modules/utils/fakedom.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_Node = function (){\n\tthrow TypeError(\"Illegal constructor\");\n};\n\nObject.defineProperty(TW_Node.prototype, 'ELEMENT_NODE', {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nObject.defineProperty(TW_Node.prototype, 'TEXT_NODE', {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nTW_TextNode.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.TEXT_NODE;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nTW_Element.prototype = Object.create(TW_Node.prototype);\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn this.ELEMENT_NODE;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/filesystem.js": {
            "title": "$:/core/modules/utils/filesystem.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nReturn the subdirectories of a path\n*/\nexports.getSubdirectories = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn null;\n\t}\n\tvar subdirs = [];\n\t$tw.utils.each(fs.readdirSync(dirPath),function(item) {\n\t\tif($tw.utils.isDirectory(path.resolve(dirPath,item))) {\n\t\t\tsubdirs.push(item);\n\t\t}\n\t});\n\treturn subdirs;\n}\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = path.resolve($tw.utils.removeTrailingSeparator(srcPath));\n\tdstPath = path.resolve($tw.utils.removeTrailingSeparator(dstPath));\n\t// Check that neither director is within the other\n\tif(srcPath.substring(0,dstPath.length) === dstPath || dstPath.substring(0,srcPath.length) === srcPath) {\n\t\treturn \"Cannot copy nested directories\";\n\t}\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file on disk (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n\tisEditableFile: true if the tiddler was loaded via non-standard options & marked editable\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\textFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters,\n\tfileInfo: an existing fileInfo to check against\n\toriginalpath: a preferred filepath if no pathFilters match\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {}, metaExt;\n\t// Propagate the isEditableFile flag\n\tif(options.fileInfo) {\n\t\tfileInfo.isEditableFile = options.fileInfo.isEditableFile || false;\n\t}\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t\tif(options.extFilters) {\n\t\t\t// Check for extension override\n\t\t\tmetaExt = $tw.utils.generateTiddlerExtension(tiddler.fields.title,{\n\t\t\t\textFilters: options.extFilters,\n\t\t\t\twiki: options.wiki\n\t\t\t});\n\t\t\tif(metaExt){\n\t\t\t\tif(metaExt === \".tid\") {\n\t\t\t\t\t// Overriding to the .tid extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else if (metaExt === \".json\") {\n\t\t\t\t\t// Overriding to the .json extension needs special handling\n\t\t\t\t\tfileInfo.type = \"application/json\";\n\t\t\t\t\tfileInfo.hasMetaFile = false;\n\t\t\t\t} else {\n\t\t\t\t\t//If the new type matches a known extention, use that MIME type's encoding\n\t\t\t\t\tvar extInfo = $tw.utils.getFileExtensionInfo(metaExt);\n\t\t\t\t\tfileInfo.type = extInfo ? extInfo.type : null;\n\t\t\t\t\tfileInfo.encoding = $tw.utils.getTypeEncoding(metaExt);\n\t\t\t\t\tfileInfo.hasMetaFile = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type or metaExt\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: metaExt || contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki,\n\t\tfileInfo: options.fileInfo,\n\t\toriginalpath: options.originalpath\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the file extension for saving a tiddler\nOptions include:\n\textFilters: optional array of filters to be used to generate the extention\n\twiki: optional wiki for evaluating the extFilters\n*/\nexports.generateTiddlerExtension = function(title,options) {\n\tvar self = this,\n\t\textension;\n\t// Check if any of the extFilters applies\n\tif(options.extFilters && options.wiki) { \n\t\t$tw.utils.each(options.extFilters,function(filter) {\n\t\t\tif(!extension) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\textension = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn extension;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n\tfileInfo: an existing fileInfo object to check against\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar self = this,\n\t\tdirectory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\toriginalpath = options.originalpath || \"\",\n\t\tfilepath;\t\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tif(!filepath && originalpath !== \"\") {\n\t\t//Use the originalpath without the extension\n\t\tvar ext = path.extname(originalpath);\n\t\tfilepath = originalpath.substring(0,originalpath.length - ext.length);\n\t} else if(!filepath) {\n\t\tfilepath = title;\n\t\t// If the filepath already ends in the extension then remove it\n\t\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t\t}\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t//If the path does not start with \".\" or \"..\" and a path seperator, then\n\tif(!/^\\.{1,2}[/\\\\]/g.test(filepath)) {\n\t\t// Don't let the filename start with any dots because such files are invisible on *nix\n\t\tfilepath = filepath.replace(/^\\.+/g,\"_\");\n\t}\n\t// Remove any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|~|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation characters)\n\tif(!filepath) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\t\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath, oldPath = (options.fileInfo) ? options.fileInfo.filepath : undefined,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tif(oldPath && oldPath == fullPath) {\n\t\t\tbreak;\n\t\t}\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// If the last write failed with an error, or if path does not start with:\n\t//\tthe resolved options.directory, the resolved wikiPath directory, or the wikiTiddlersPath directory, \n\t//\tthen encodeURIComponent() and resolve to tiddler directory\n\tvar newPath = fullPath,\n\t\tencode = (options.fileInfo || {writeError: false}).writeError == true;\n\tif(!encode){\n\t\tencode = !(fullPath.indexOf(path.resolve(directory)) == 0 ||\n\t\t\tfullPath.indexOf(path.resolve($tw.boot.wikiPath)) == 0 ||\n\t\t\tfullPath.indexOf($tw.boot.wikiTiddlersPath) == 0);\n\t\t}\n\tif(encode){\n\t\tfullPath = path.resolve(directory, encodeURIComponent(fullPath));\n\t}\n\t// Call hook to allow plugins to modify the final path\n\tfullPath = $tw.hooks.invokeHook(\"th-make-tiddler-path\", newPath, fullPath);\n\t// Return the full path to the file\n\treturn fullPath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",callback);\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",callback);\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",callback);\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n};\n\n/*\nDelete a file described by the fileInfo if it exits\n*/\nexports.deleteTiddlerFile = function(fileInfo, callback) {\n\t//Only attempt to delete files that exist on disk\n\tif(!fileInfo.filepath || !fs.existsSync(fileInfo.filepath)) {\n\t\treturn callback(null);\n\t}\n\t// Delete the file\n\tfs.unlink(fileInfo.filepath,function(err) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\t\n\t\t// Delete the metafile if present\n\t\tif(fileInfo.hasMetaFile && fs.existsSync(fileInfo.filepath + \".meta\")) {\n\t\t\tfs.unlink(fileInfo.filepath + \".meta\",function(err) {\n\t\t\t\tif(err) {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t\t});\n\t\t} else {\n\t\t\treturn $tw.utils.deleteEmptyDirs(path.dirname(fileInfo.filepath),callback);\n\t\t}\n\t});\n};\n\n/*\nCleanup old files on disk, by comparing the options values:\n\tadaptorInfo from $tw.syncer.tiddlerInfo\n\tbootInfo from $tw.boot.files\n*/\nexports.cleanupTiddlerFiles = function(options, callback) {\n\tvar adaptorInfo = options.adaptorInfo || {},\n\tbootInfo = options.bootInfo || {},\n\ttitle = options.title || \"undefined\";\n\tif(adaptorInfo.filepath && bootInfo.filepath && adaptorInfo.filepath !== bootInfo.filepath) {\n\t\treturn $tw.utils.deleteTiddlerFile(adaptorInfo, function(err){\n\t\t\tif(err) {\n\t\t\t\tif ((err.code == \"EPERM\" || err.code == \"EACCES\") && err.syscall == \"unlink\") {\n\t\t\t\t\t// Error deleting the previous file on disk, should fail gracefully\n\t\t\t\t\t$tw.syncer.displayError(\"Server desynchronized. Error cleaning up previous file for tiddler: \"+title, err);\n\t\t\t\t\treturn callback(null);\n\t\t\t\t} else {\n\t\t\t\t\treturn callback(err);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn callback(null);\n\t\t});\n\t} else {\n\t\treturn callback(null);\n\t}\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils-node"
        },
        "$:/core/modules/utils/linkedlist.js": {
            "title": "$:/core/modules/utils/linkedlist.js",
            "text": "/*\\\nmodule-type: utils\ntitle: $:/core/modules/utils/linkedlist.js\ntype: application/javascript\n\nThis is a doubly-linked indexed list intended for manipulation, particularly\npushTop, which it does with significantly better performance than an array.\n\n\\*/\n(function(){\n\nfunction LinkedList() {\n\tthis.clear();\n};\n\nLinkedList.prototype.clear = function() {\n\tthis.index = Object.create(null);\n\t// LinkedList performs the duty of both the head and tail node\n\tthis.next = this;\n\tthis.prev = this;\n\tthis.length = 0;\n};\n\nLinkedList.prototype.remove = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t} else {\n\t\t_removeOne(this,value);\n\t}\n};\n\nLinkedList.prototype.push = function(/* values */) {\n\tfor(var i = 0; i < arguments.length; i++) {\n\t\tvar value = arguments[i];\n\t\tvar node = {value: value};\n\t\tvar preexistingNode = this.index[value];\n\t\t_linkToEnd(this,node);\n\t\tif(preexistingNode) {\n\t\t\t// We want to keep pointing to the first instance, but we want\n\t\t\t// to have that instance (or chain of instances) point to the\n\t\t\t// new one.\n\t\t\twhile (preexistingNode.copy) {\n\t\t\t\tpreexistingNode = preexistingNode.copy;\n\t\t\t}\n\t\t\tpreexistingNode.copy = node;\n\t\t} else {\n\t\t\tthis.index[value] = node;\n\t\t}\n\t}\n};\n\nLinkedList.prototype.pushTop = function(value) {\n\tif($tw.utils.isArray(value)) {\n\t\tfor(var t=0; t<value.length; t++) {\n\t\t\t_removeOne(this,value[t]);\n\t\t}\n\t\tthis.push.apply(this,value);\n\t} else {\n\t\tvar node = _removeOne(this,value);\n\t\tif(!node) {\n\t\t\tnode = {value: value};\n\t\t\tthis.index[value] = node;\n\t\t} else {\n\t\t\t// Put this node at the end of the copy chain.\n\t\t\tvar preexistingNode = node;\n\t\t\twhile(preexistingNode.copy) {\n\t\t\t\tpreexistingNode = preexistingNode.copy;\n\t\t\t}\n\t\t\t// The order of these three statements is important,\n\t\t\t// because sometimes preexistingNode == node.\n\t\t\tpreexistingNode.copy = node;\n\t\t\tthis.index[value] = node.copy;\n\t\t\tnode.copy = undefined;\n\t\t}\n\t\t_linkToEnd(this,node);\n\t}\n};\n\nLinkedList.prototype.each = function(callback) {\n\tfor(var ptr = this.next; ptr !== this; ptr = ptr.next) {\n\t\tcallback(ptr.value);\n\t}\n};\n\nLinkedList.prototype.toArray = function() {\n\tvar output = [];\n\tfor(var ptr = this.next; ptr !== this; ptr = ptr.next) {\n\t\toutput.push(ptr.value);\n\t}\n\treturn output;\n};\n\nfunction _removeOne(list,value) {\n\tvar node = list.index[value];\n\tif(node) {\n\t\tnode.prev.next = node.next;\n\t\tnode.next.prev = node.prev;\n\t\tlist.length -= 1;\n\t\t// Point index to the next instance of the same value, maybe nothing.\n\t\tlist.index[value] = node.copy;\n\t}\n\treturn node;\n};\n\nfunction _linkToEnd(list,node) {\n\t// Sticks the given node onto the end of the list.\n\tlist.prev.next = node;\n\tnode.prev = list.prev;\n\tlist.prev = node;\n\tnode.next = list;\n\tlist.length += 1;\n};\n\nexports.LinkedList = LinkedList;\n\n})();\n",
            "module-type": "utils",
            "type": "application/javascript"
        },
        "$:/core/modules/utils/logger.js": {
            "title": "$:/core/modules/utils/logger.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n\tthis.save = \"save\" in options ? options.save : true;\n\tthis.saveLimit = options.saveLimit || 100 * 1024;\n\tthis.saveBufferLogger = this;\n\tthis.buffer = \"\";\n\tthis.alertCount = 0;\n}\n\nLogger.prototype.setSaveBuffer = function(logger) {\n\tthis.saveBufferLogger = logger;\n};\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tvar self = this;\n\tif(this.enable) {\n\t\tif(this.saveBufferLogger.save) {\n\t\t\tthis.saveBufferLogger.buffer += $tw.utils.formatDateString(new Date(),\"YYYY MM DD 0hh:0mm:0ss.0XXX\") + \":\";\n\t\t\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\n\t\t\t\tself.saveBufferLogger.buffer += \" \" + arg;\n\t\t\t});\n\t\t\tthis.saveBufferLogger.buffer += \"\\n\";\n\t\t\tthis.saveBufferLogger.buffer = this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\t\t\t\n\t\t}\n\t\tif(console !== undefined && console.log !== undefined) {\n\t\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t\t}\n\t} \n};\n\n/*\nRead the message buffer\n*/\nLogger.prototype.getBuffer = function() {\n\treturn this.saveBufferLogger.buffer;\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t\tthis.alertCount += 1;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\n/*\nClear outstanding alerts\n*/\nLogger.prototype.clearAlerts = function() {\n\tvar self = this;\n\tif($tw.browser && this.alertCount > 0) {\n\t\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.component === self.componentName) {\n\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t}\n\t\t});\n\t\tthis.alertCount = 0;\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/parsetree.js": {
            "title": "$:/core/modules/utils/parsetree.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/performance.js": {
            "title": "$:/core/modules/utils/performance.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\t\t\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "global"
        },
        "$:/core/modules/utils/pluginmaker.js": {
            "title": "$:/core/modules/utils/pluginmaker.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/transliterate.js": {
            "title": "$:/core/modules/utils/transliterate.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/utils/utils.js": {
            "title": "$:/core/modules/utils/utils.js",
            "text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nLog a table of name: value pairs\n*/\nexports.logTable = function(data) {\n\tif(console.table) {\n\t\tconsole.table(data);\n\t} else {\n\t\t$tw.utils.each(data,function(value,name) {\n\t\t\tconsole.log(name + \": \" + value);\n\t\t});\n\t}\n}\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimPrefix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/^\\s\\s*/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('^(' + unwanted + ')+');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\nexports.trimSuffix = function(str,unwanted) {\n\tif(typeof str === \"string\" && typeof unwanted === \"string\") {\n\t\tif(unwanted === \"\") {\n\t\t\treturn str.replace(/\\s\\s*$/, '');\n\t\t} else {\n\t\t\t// Safely regexp-escape the unwanted text\n\t\t\tunwanted = unwanted.replace(/[\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tvar regex = new RegExp('(' + unwanted + ')+$');\n\t\t\treturn str.replace(regex, '');\n\t\t}\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\t\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date),4);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear(),4);\n\t\t\t}],\n\t\t\t[/^aYYYY/, function() {\n\t\t\t\treturn $tw.utils.pad(Math.abs(date.getFullYear()),4);\n\t\t\t}],\n\t\t\t[/^\\{era:([^,\\|}]*)\\|([^}\\|]*)\\|([^}]*)\\}/, function(match) {\n\t\t\t\tvar year = date.getFullYear();\n\t\t\t\treturn year === 0 ? match[2] : (year < 0 ? match[1] : match[3]);\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds(),3);\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call(null,match);\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\",   duration:      365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\",  duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\",    duration:            24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\",   duration:                 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration:                      60 * 1000},\n\t\t{name: \"Seconds\", duration:                           1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&amp;\", < to \"&lt;\", > to \"&gt;\", \" to \"&quot;\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&amp;\").replace(/</mg,\"&lt;\").replace(/>/mg,\"&gt;\").replace(/\\\"/mg,\"&quot;\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s, rawUnicode) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/'/g, \"\\\\'\")              // single quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(regex, exports.escape);   // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s, rawUnicode) {\n\t// See http://www.json.org/\n\tvar regex = rawUnicode ? /[\\x00-\\x1f]/g : /[\\x00-\\x1f\\x80-\\uFFFF]/g;\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\')            // backslash\n\t\t.replace(/\"/g, '\\\\\"')              // double quote character\n\t\t.replace(/\\r/g, '\\\\r')             // carriage return\n\t\t.replace(/\\n/g, '\\\\n')             // line feed\n\t\t.replace(/\\x08/g, '\\\\b')           // backspace\n\t\t.replace(/\\x0c/g, '\\\\f')           // formfeed\n\t\t.replace(/\\t/g, '\\\\t')             // tab\n\t\t.replace(regex,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n    return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm =  r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type,_canonical_uri) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tif(_canonical_uri) {\n\t\tparts.push(_canonical_uri);\n\t} else {\n\t\tparts.push(\"data:\");\n\t\tparts.push(type);\n\t\tparts.push(isBase64 ? \";base64\" : \"\");\n\t\tparts.push(\",\");\n\t\tparts.push(isBase64 ? text : encodeURIComponent(text));\t\t\n\t}\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n/*\nReturn system information useful for debugging\n*/\nexports.getSystemInfo = function(str,ending,position) {\n\tvar results = [],\n\t\tsave = function(desc,value) {\n\t\t\tresults.push(desc + \": \" + value);\n\t\t};\n\tif($tw.browser) {\n\t\tsave(\"User Agent\",navigator.userAgent);\n\t\tsave(\"Online Status\",window.navigator.onLine);\n\t}\n\tif($tw.node) {\n\t\tsave(\"Node Version\",process.version);\n\t}\n\treturn results.join(\"\\n\");\n};\n\nexports.parseNumber = function(str) {\n\treturn parseFloat(str) || 0;\n};\n\nexports.parseInt = function(str) {\n\treturn parseInt(str,10) || 0;\n};\n\nexports.stringifyNumber = function(num) {\n\treturn num + \"\";\n};\n\nexports.makeCompareFunction = function(type,options) {\n\toptions = options || {};\n\tvar gt = options.invert ? -1 : +1,\n\t\tlt = options.invert ? +1 : -1,\n\t\tcompare = function(a,b) {\n\t\t\tif(a > b) {\n\t\t\t\treturn gt ;\n\t\t\t} else if(a < b) {\n\t\t\t\treturn lt;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t},\n\t\ttypes = {\n\t\t\t\"number\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\n\t\t\t},\n\t\t\t\"integer\": function(a,b) {\n\t\t\t\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\n\t\t\t},\n\t\t\t\"string\": function(a,b) {\n\t\t\t\treturn compare(\"\" + a,\"\" +b);\n\t\t\t},\n\t\t\t\"date\": function(a,b) {\n\t\t\t\tvar dateA = $tw.utils.parseDate(a),\n\t\t\t\t\tdateB = $tw.utils.parseDate(b);\n\t\t\t\tif(!isFinite(dateA)) {\n\t\t\t\t\tdateA = new Date(0);\n\t\t\t\t}\n\t\t\t\tif(!isFinite(dateB)) {\n\t\t\t\t\tdateB = new Date(0);\n\t\t\t\t}\n\t\t\t\treturn compare(dateA,dateB);\n\t\t\t},\n\t\t\t\"version\": function(a,b) {\n\t\t\t\treturn $tw.utils.compareVersions(a,b);\n\t\t\t}\n\t\t};\n\treturn (types[type] || types[options.defaultType] || types.number);\n};\n\n})();\n",
            "type": "application/javascript",
            "module-type": "utils"
        },
        "$:/core/modules/widgets/action-confirm.js": {
            "title": "$:/core/modules/widgets/action-confirm.js",
            "text": "/*\\\n\ntitle: $:/core/modules/widgets/action-confirm.js\ntype: application/javascript\nmodule-type: widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ConfirmWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nConfirmWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nConfirmWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.parentDomNode = parent;\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nConfirmWidget.prototype.execute = function() {\n\tthis.message = this.getAttribute(\"$message\",$tw.language.getString(\"ConfirmAction\"));\n\tthis.prompt = (this.getAttribute(\"$prompt\",\"yes\") == \"no\" ? false : true);\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nConfirmWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$message\"] || changedAttributes[\"$prompt\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nConfirmWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar invokeActions = true,\n\t\thandled = true;\n\tif(this.prompt) {\n\t\tinvokeActions = confirm(this.message);\n\t}\n\tif(invokeActions) {\n\t\thandled = this.invokeActions(triggeringWidget,event);\n\t}\n\treturn handled;\n};\n\nConfirmWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nexports[\"action-confirm\"] = ConfirmWidget;\n\n})();",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-createtiddler.js": {
            "title": "$:/core/modules/widgets/action-createtiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw:false, require:false, exports:false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.hasBase = !!this.actionBaseTitle;\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n\t//Following params are new since 5.1.22\n\tthis.actionTemplate = this.getAttribute(\"$template\");\n\tthis.useTemplate = !!this.actionTemplate;\n\tthis.actionOverwrite = this.getAttribute(\"$overwrite\",\"no\");\n\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.getTiddlerText(\"$:/language/DefaultNewTiddlerTitle\"), // Get the initial new-tiddler title\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tif(this.hasBase && this.actionOverwrite === \"no\") {\n\t\ttitle = this.wiki.generateNewTitle(this.actionBaseTitle);\n\t} else if (this.hasBase && this.actionOverwrite === \"yes\") {\n\t\ttitle = this.actionBaseTitle\n\t}\n\t// NO $basetitle BUT $template parameter is available\n\t// the title MUST be unique, otherwise the template would be overwritten\n\tif (!this.hasBase && this.useTemplate) {\n\t\ttitle = this.wiki.generateNewTitle(this.actionTemplate);\n\t} else if (!this.hasBase && !this.useTemplate) {\n\t\t// If NO $basetitle AND NO $template use initial title\n\t\t// DON'T overwrite any stuff\n\t\ttitle = this.wiki.generateNewTitle(title);\n\t}\n\tvar templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {};\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,this.wiki.generateDraftTitle(title),this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletefield.js": {
            "title": "$:/core/modules/widgets/action-deletefield.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-deletetiddler.js": {
            "title": "$:/core/modules/widgets/action-deletetiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-listops.js": {
            "title": "$:/core/modules/widgets/action-listops.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-log.js": {
            "title": "$:/core/modules/widgets/action-log.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-log.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LogWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLogWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLogWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\nLogWidget.prototype.execute = function(){\n\tthis.message = this.getAttribute(\"$$message\",\"debug\");\n\tthis.logAll = this.getAttribute(\"$$all\",\"no\") === \"yes\" ? true : false;\n\tthis.filter = this.getAttribute(\"$$filter\");\n}\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nLogWidget.prototype.refresh = function(changedTiddlers) {\n\tthis.refreshSelf();\n\treturn true;\n};\n\n/*\nInvoke the action associated with this widget\n*/\nLogWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tthis.log();\n\treturn true; // Action was invoked\n};\n\nLogWidget.prototype.log = function() {\n\tvar data = {},\n\t\tdataCount,\n\t\tallVars = {},\n\t\tfilteredVars;\n\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.substring(0,2) !== \"$$\") {\n\t\t\tdata[name] = attribute;\n\t\t}\t\t\n\t});\n\n\tfor(var v in this.variables) {\n\t\tallVars[v] = this.getVariable(v,{defaultValue:\"\"});\n\t}\t\n\tif(this.filter) {\n\t\tfilteredVars = this.wiki.compileFilter(this.filter).call(this.wiki,this.wiki.makeTiddlerIterator(allVars));\n\t\t$tw.utils.each(filteredVars,function(name) {\n\t\t\tdata[name] = allVars[name];\n\t\t});\t\t\n\t}\n\tdataCount = $tw.utils.count(data);\n\n\tconsole.group(this.message);\n\tif(dataCount > 0) {\n\t\t$tw.utils.logTable(data);\n\t}\n\tif(this.logAll || !dataCount) {\n\t\tconsole.groupCollapsed(\"All variables\");\n\t\t$tw.utils.logTable(allVars);\n\t\tconsole.groupEnd();\n\t}\n\tconsole.groupEnd();\n}\n\nexports[\"action-log\"] = LogWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-navigate.js": {
            "title": "$:/core/modules/widgets/action-navigate.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-popup.js": {
            "title": "$:/core/modules/widgets/action-popup.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-popup.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to trigger a popup.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ActionPopupWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nActionPopupWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nActionPopupWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nActionPopupWidget.prototype.execute = function() {\n\tthis.actionState = this.getAttribute(\"$state\");\n\tthis.actionCoords = this.getAttribute(\"$coords\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nActionPopupWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$state\"] || changedAttributes[\"$coords\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Trigger the popup\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(this.actionCoords || \"\");\n\tif(match) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: null,\n\t\t\tdomNodeRect: {\n\t\t\t\tleft: parseFloat(match[1]),\n\t\t\t\ttop: parseFloat(match[2]),\n\t\t\t\twidth: parseFloat(match[3]),\n\t\t\t\theight: parseFloat(match[4])\n\t\t\t},\n\t\t\ttitle: this.actionState,\n\t\t\twiki: this.wiki\n\t\t});\n\t} else {\n\t\t$tw.popup.cancel(0);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-popup\"] = ActionPopupWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-sendmessage.js": {
            "title": "$:/core/modules/widgets/action-sendmessage.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/action-setfield.js": {
            "title": "$:/core/modules/widgets/action-setfield.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\")  || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/browse.js": {
            "title": "$:/core/modules/widgets/browse.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\tif(this.accept) {\n\t\tdomNode.setAttribute(\"accept\",this.accept);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.accept = this.getAttribute(\"accept\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/button.js": {
            "title": "$:/core/modules/widgets/button.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = \"button\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tdomNode.setAttribute(\"disabled\",true);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tself.invokeActionString(self.actions,self,event,{modifier: modifierKey});\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n    return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nButtonWidget.prototype.updateDomNodeClasses = function() {\n\tvar domNodeClasses = this.domNode.className.split(\" \"),\n\t\toldClasses = this.class.split(\" \"),\n\t\tnewClasses;\t\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tnewClasses = this.class.split(\" \");\n\t//Remove classes assigned from the old value of class attribute\n\t$tw.utils.each(oldClasses,function(oldClass){\n\t\tvar i = domNodeClasses.indexOf(oldClass);\n\t\tif(i !== -1) {\n\t\t\tdomNodeClasses.splice(i,1);\n\t\t}\n\t});\n\t//Add new classes from updated class attribute.\n\t$tw.utils.pushTop(domNodeClasses,newClasses);\n\tthis.domNode.className = domNodeClasses.join(\" \");\n}\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.updateDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/checkbox.js": {
            "title": "$:/core/modules/widgets/checkbox.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.disabled) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/codeblock.js": {
            "title": "$:/core/modules/widgets/codeblock.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/count.js": {
            "title": "$:/core/modules/widgets/count.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = \"0\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/diff-text.js": {
            "title": "$:/core/modules/widgets/diff-text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/draggable.js": {
            "title": "$:/core/modules/widgets/draggable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/droppable.js": {
            "title": "$:/core/modules/widgets/droppable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this,\n\t\ttag = this.parseTreeNode.isBlock ? \"div\" : \"span\",\n\t\tdomNode;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tdomNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\t// Add event handlers\n\tif(this.droppableEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t\t]);\t\t\n\t} else {\n\t\t$tw.utils.addClass(this.domNode,this.disabledClass);\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\tif(this.domNodes[0]) {\n\t\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t\t}\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent  = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent  = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.disabledClass = this.getAttribute(\"disabledClass\",\"\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nDroppableWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tthis.domNode.className = classes.join(\" \");\t\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes.enable || changedAttributes.disabledClass || changedAttributes.actions || changedAttributes.effect) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/dropzone.js": {
            "title": "$:/core/modules/widgets/dropzone.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = this.dropzoneClass || \"tc-dropzone\";\n\t// Add event handlers\n\tif(this.dropzoneEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\t\t\n\t}\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent  = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent  = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent  = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.handleDropEvent  = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent  = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields]), autoOpenOnImport: self.autoOpenOnImport, importTitle: self.importTitle});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneClass = this.getAttribute(\"class\");\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\tthis.dropzoneEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\tthis.autoOpenOnImport = this.getAttribute(\"autoOpenOnImport\");\n\tthis.importTitle = this.getAttribute(\"importTitle\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.enable || changedAttributes.autoOpenOnImport || changedAttributes.importTitle || changedAttributes.deserializer || changedAttributes.class) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-binary.js": {
            "title": "$:/core/modules/widgets/edit-binary.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Get our parameters\n\tvar editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tvar tiddler = this.wiki.getTiddler(editTitle);\n\tvar type = tiddler.fields.type;\n\tvar text = tiddler.fields.text;\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on draft tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!draft.title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!draft.title\"}\n\t\t},\n\t\tchildren: [{\n\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to internal data URI (no external)\n\tif(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets([element]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-bitmap.js": {
            "title": "$:/core/modules/widgets/edit-bitmap.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\t\t\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-shortcut.js": {
            "title": "$:/core/modules/widgets/edit-shortcut.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit-text.js": {
            "title": "$:/core/modules/widgets/edit-text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/edit.js": {
            "title": "$:/core/modules/widgets/edit.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\tthis.editFocus = this.getAttribute(\"focus\",\"\");\n\tthis.editCancelPopups = this.getAttribute(\"cancelPopups\",\"\");\n\tthis.editInputActions = this.getAttribute(\"inputActions\");\n\tthis.editRefreshTitle = this.getAttribute(\"refreshTitle\");\n\tthis.editAutoComplete = this.getAttribute(\"autocomplete\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: this.parseTreeNode.attributes,\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || changedAttributes.cancelPopups || changedAttributes.inputActions || changedAttributes.refreshTitle || changedAttributes.autocomplete || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/element.js": {
            "title": "$:/core/modules/widgets/element.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\t// Neuter blacklisted elements\n\tthis.tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(this.tag) !== -1) {\n\t\tthis.tag = \"safe-\" + this.tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(this.tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\tthis.tag = \"h\" + headingLevel;\n\t}\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Invoke the th-rendering-element hook\n\tvar parseTreeNodes = $tw.hooks.invokeHook(\"th-rendering-element\",null,this);\n\tthis.isReplaced = !!parseTreeNodes;\n\tif(parseTreeNodes) {\n\t\t// Use the parse tree nodes provided by the hook\n\t\tthis.makeChildWidgets(parseTreeNodes);\n\t\tthis.renderChildren(this.parentDomNode,null);\n\t\treturn;\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n\t// Create the DOM node and render children\n\tvar domNode = this.document.createElementNS(this.namespace,this.tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\tif(!this.isReplaced) {\n\t\t\t// Update our attributes\n\t\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\t\t\t\n\t\t} else {\n\t\t\t// If we were replaced then completely refresh ourselves\n\t\t\treturn this.refreshSelf();\n\t\t}\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/encrypt.js": {
            "title": "$:/core/modules/widgets/encrypt.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/entity.js": {
            "title": "$:/core/modules/widgets/entity.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/eventcatcher.js": {
            "title": "$:/core/modules/widgets/eventcatcher.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/eventcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nEvent handler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EventWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEventWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEventWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.elementTag && $tw.config.htmlUnsafeElements.indexOf(this.elementTag) === -1) {\n\t\ttag = this.elementTag;\n\t}\t\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\t// Assign classes\n\tthis.assignDomNodeClasses();\t\n\t// Add our event handler\n\t$tw.utils.each(this.types,function(type) {\n\t\tdomNode.addEventListener(type,function(event) {\n\t\t\tvar selector = self.getAttribute(\"selector\"),\n\t\t\t\tactions = self.getAttribute(\"actions-\"+type),\n\t\t\t\tselectedNode = event.target,\n\t\t\t\tselectedNodeRect,\n\t\t\t\tcatcherNodeRect,\n\t\t\t\tvariables = {};\n\t\t\tif(selector) {\n\t\t\t\t// Search ancestors for a node that matches the selector\n\t\t\t\twhile(!selectedNode.matches(selector) && selectedNode !== domNode) {\n\t\t\t\t\tselectedNode = selectedNode.parentNode;\n\t\t\t\t}\n\t\t\t\t// If we found one, copy the attributes as variables, otherwise exit\n\t\t\t\tif(selectedNode.matches(selector)) {\n\t\t\t\t\t$tw.utils.each(selectedNode.attributes,function(attribute) {\n\t\t\t\t\t\tvariables[\"dom-\" + attribute.name] = attribute.value.toString();\n\t\t\t\t\t});\n\t\t\t\t\t//Add a variable with a popup coordinate string for the selected node\n\t\t\t\t\tvariables[\"tv-popup-coords\"] = \"(\" + selectedNode.offsetLeft + \",\" + selectedNode.offsetTop +\",\" + selectedNode.offsetWidth + \",\" + selectedNode.offsetHeight + \")\";\n\t\t\t\t\t\n\t\t\t\t\t//Add variables for offset of selected node\n\t\t\t\t\tvariables[\"tv-selectednode-posx\"] = selectedNode.offsetLeft.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-posy\"] = selectedNode.offsetTop.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-width\"] = selectedNode.offsetWidth.toString();\n\t\t\t\t\tvariables[\"tv-selectednode-height\"] = selectedNode.offsetHeight.toString();\n\n\t\t\t\t\t//Add variables for event X and Y position relative to selected node\n\t\t\t\t\tselectedNodeRect = selectedNode.getBoundingClientRect();\t\t\t\t\n\t\t\t\t\tvariables[\"event-fromselected-posx\"] = (event.clientX - selectedNodeRect.left).toString();\n\t\t\t\t\tvariables[\"event-fromselected-posy\"] = (event.clientY - selectedNodeRect.top).toString();\n\n\t\t\t\t\t//Add variables for event X and Y position relative to event catcher node\n\t\t\t\t\tcatcherNodeRect = self.domNode.getBoundingClientRect();\n\t\t\t\t\tvariables[\"event-fromcatcher-posx\"] = (event.clientX - catcherNodeRect.left).toString();\n\t\t\t\t\tvariables[\"event-fromcatcher-posy\"] = (event.clientY - catcherNodeRect.top).toString();\n\t\t\t\t} else {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Execute our actions with the variables\n\t\t\tif(actions) {\n\t\t\t\t// Add a variable for the modifier key\n\t\t\t\tvariables.modifier = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\t\t// Add a variable for the mouse button\n\t\t\t\tif(\"button\" in event) {\n\t\t\t\t\tif(event.button === 0) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"left\";\n\t\t\t\t\t} else if(event.button === 1) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"middle\";\n\t\t\t\t\t} else if(event.button === 2) {\n\t\t\t\t\t\tvariables[\"event-mousebutton\"] = \"right\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tvariables[\"event-type\"] = event.type.toString();\n\t\t\t\tif(typeof event.detail === \"object\" && !!event.detail) {\n\t\t\t\t\t$tw.utils.each(event.detail,function(detailValue,detail) {\n\t\t\t\t\t\tvariables[\"event-detail-\" + detail] = detailValue.toString();\n\t\t\t\t\t});\n\t\t\t\t} else if(!!event.detail) {\n\t\t\t\t\tvariables[\"event-detail\"] = event.detail.toString();\n\t\t\t\t}\n\t\t\t\tself.invokeActionString(actions,self,event,variables);\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},false);\n\t});\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEventWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes that require a refresh on change\n\tthis.types = this.getAttribute(\"events\",\"\").split(\" \");\n\tthis.elementTag = this.getAttribute(\"tag\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\nEventWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-eventcatcher\");\n\tthis.domNode.className = classes.join(\" \");\t\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEventWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"events\"] || changedAttributes[\"tag\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedAttributes[\"class\"]) {\n\t\tthis.assignDomNodeClasses();\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.eventcatcher = EventWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fieldmangler.js": {
            "title": "$:/core/modules/widgets/fieldmangler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/fields.js": {
            "title": "$:/core/modules/widgets/fields.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.sort = this.getAttribute(\"sort\",\"yes\") === \"yes\";\n\tthis.sortReverse = this.getAttribute(\"sortReverse\",\"no\") === \"yes\";\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.include = this.getAttribute(\"include\",null);\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\n\t// Get the inclusion and exclusion list\n\tvar excludeArr = (this.exclude) ? this.exclude.split(\" \") : [\"text\"];\n\t// Include takes precedence\n\tvar includeArr = (this.include) ? this.include.split(\" \") : null;\n\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tif (includeArr) { // Include takes precedence\n\t\t\tfor(var i=0; i<includeArr.length; i++) {\n\t\t\t\tif(tiddler.fields[includeArr[i]]) {\n\t\t\t\t\tfields.push(includeArr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\tif(excludeArr.indexOf(fieldName) === -1) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.sort) fields.sort();\n\t\tif (this.sortReverse) fields.reverse();\n\t\tfor(var f=0, fmax=fields.length; f<fmax; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tvar row = this.template,\n\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\tif(reMatch) {\n\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\ttext.push(row);\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\n\t\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\n\t\tchangedTiddlers[this.tiddlerTitle] || changedAttributes.stripTitlePrefix) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/image.js": {
            "title": "$:/core/modules/widgets/image.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/importvariables.js": {
            "title": "$:/core/modules/widgets/importvariables.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar widgetPointer = this;\n\t// Got to flush all the accumulated variables\n\tthis.variables = new this.variablesConstructor();\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = widgetPointer.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tvar node = {\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t};\n\t\t\t\tif (parseTreeNode.isMacroDefinition) {\n\t\t\t\t\t// Macro definitions can be folded into\n\t\t\t\t\t// current widget instead of adding\n\t\t\t\t\t// another link to the chain.\n\t\t\t\t\tvar widget = widgetPointer.makeChildWidget(node);\n\t\t\t\t\twidget.computeAttributes();\n\t\t\t\t\twidget.execute();\n\t\t\t\t\t// We SHALLOW copy over all variables\n\t\t\t\t\t// in widget. We can't use\n\t\t\t\t\t// $tw.utils.assign, because that copies\n\t\t\t\t\t// up the prototype chain, which we\n\t\t\t\t\t// don't want.\n\t\t\t\t\t$tw.utils.each(Object.keys(widget.variables), function(key) {\n\t\t\t\t\t\twidgetPointer.variables[key] = widget.variables[key];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twidgetPointer.children = [widgetPointer.makeChildWidget(node)];\n\t\t\t\t\t// No more regenerating children for\n\t\t\t\t\t// this widget. If it needs to refresh,\n\t\t\t\t\t// it'll do so along with the the whole\n\t\t\t\t\t// importvariable tree.\n\t\t\t\t\tif (widgetPointer != this) {\n\t\t\t\t\t\twidgetPointer.makeChildWidgets = function(){};\n\t\t\t\t\t}\n\t\t\t\t\twidgetPointer = widgetPointer.children[0];\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\n\tif (widgetPointer != this) {\n\t\twidgetPointer.parseTreeNode.children = this.parseTreeNode.children;\n\t} else {\n\t\twidgetPointer.makeChildWidgets();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/keyboard.js": {
            "title": "$:/core/modules/widgets/keyboard.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tvar handled = self.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tif(handled || self.actions || self.message) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/link.js": {
            "title": "$:/core/modules/widgets/link.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"}),\n\t\tdomNode = this.document.createElementNS(namespace,tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tvar namespaceHref = (namespace === \"http://www.w3.org/2000/svg\") ? \"http://www.w3.org/1999/xlink\" : undefined;\n\t\tdomNode.setAttributeNS(namespaceHref,\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey,\n\t\tevent: event\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/linkcatcher.js": {
            "title": "$:/core/modules/widgets/linkcatcher.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tvar modifierKey = $tw.keyboardManager.getEventModifierKeyDescriptor(event);\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo, modifier: modifierKey});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/list.js": {
            "title": "$:/core/modules/widgets/list.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar parser,\n\t\temptyMessage = this.getAttribute(\"emptyMessage\",\"\");\n\t// this.wiki.parseText() calls \n\t// new Parser(..), which should only be done, if needed, because it's heavy!\n\tif (emptyMessage === \"\") {\n\t\treturn [];\n\t}\n\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/log.js": {
            "title": "$:/core/modules/widgets/log.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/log.js\ntype: application/javascript\nmodule-type: widget-subclass\n\nWidget to log debug messages\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.baseClass = \"action-log\";\n\nexports.name = \"log\";\n\nexports.constructor = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n}\n\nexports.prototype = {};\n\nexports.prototype.render = function(event) {\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).render.call(this,event);\t\n\tObject.getPrototypeOf(Object.getPrototypeOf(this)).log.call(this);\n}\n\n})();",
            "type": "application/javascript",
            "module-type": "widget-subclass"
        },
        "$:/core/modules/widgets/macrocall.js": {
            "title": "$:/core/modules/widgets/macrocall.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\t// Check if we've already cached parsing this macro\n\t\tvar mode = this.parseTreeNode.isBlock ? \"blockParser\" : \"inlineParser\",\n\t\t\tparser;\n\t\tif(variableInfo.srcVariable && variableInfo.srcVariable[mode]) {\n\t\t\tparser = variableInfo.srcVariable[mode];\n\t\t} else {\n\t\t\tparser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\t\tif(variableInfo.isCacheable && variableInfo.srcVariable) {\n\t\t\t\tvariableInfo.srcVariable[mode] = parser;\n\t\t\t}\n\t\t}\n\t\tvar parseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else if(this.renderOutput === \"text/raw\") {\n\t\tparseTreeNodes = [{type: \"text\", text: text}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/navigator.js": {
            "title": "$:/core/modules/widgets/navigator.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\tthis.story = new $tw.Story({\n\t\twiki: this.wiki,\n\t\tstoryTitle: this.storyTitle,\n\t\thistoryTitle: this.historyTitle\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\t\t\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.story.addToStory(title,fromTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.story.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\t\ttext: \"\",\n\t\t\t},\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler,tiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTitle = event.importTitle ? event.importTitle : IMPORT_TITLE,\n\t\timportTiddler = this.wiki.getTiddler(importTitle),\n\t\timportData = this.wiki.getTiddlerData(importTitle,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: importTitle,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t\tnewFields[\"suppressed-\" + title] = \"yes\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tvar autoOpenOnImport = event.autoOpenOnImport ? event.autoOpenOnImport : this.getVariable(\"tv-auto-open-on-import\");  \n\tif(autoOpenOnImport !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(importTitle) === -1) {\n\t\t\tstoryList.unshift(importTitle);\n\t\t}\n\t\t// And to history\n\t\thistory.push(importTitle);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tif($tw.utils.hop(importTiddler.fields,[\"rename-\" + title])) {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields,{title : importTiddler.fields[\"rename-\" + title]});\n\t\t\t} else {\n\t\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\t}\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddler.fields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar options = {},\n\t\tparamObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\toptions.dontRenameInTags = (paramObject.renameInTags === \"false\" || paramObject.renameInTags === \"no\") ? true : false;\n\toptions.dontRenameInLists = (paramObject.renameInLists === \"false\" || paramObject.renameInLists === \"no\") ? true : false;\n\tthis.wiki.renameTiddler(from,to,options);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/password.js": {
            "title": "$:/core/modules/widgets/password.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/qualify.js": {
            "title": "$:/core/modules/widgets/qualify.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/radio.js": {
            "title": "$:/core/modules/widgets/radio.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n\t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n\t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n\t// Trigger actions\n\tif(this.radioActions) {\n\t\tthis.invokeActionString(this.radioActions,this,event,{\"actionValue\": this.radioValue});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\tthis.radioActions = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(($tw.utils.count(changedAttributes) > 0) || changedTiddlers[this.radioTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/range.js": {
            "title": "$:/core/modules/widgets/range.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tif(this.isDisabled === \"yes\") {\n\t\tthis.inputDomNode.setAttribute(\"disabled\",true);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name:\"mousedown\", handlerObject:this, handlerMethod:\"handleMouseDownEvent\"},\n\t\t{name:\"mouseup\",   handlerObject:this, handlerMethod:\"handleMouseUpEvent\"},\n\t\t{name:\"change\",    handlerObject:this, handlerMethod:\"handleChangeEvent\"},\n\t\t{name:\"input\",     handlerObject:this, handlerMethod:\"handleInputEvent\"},\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tfieldName = this.tiddlerField,\n\t\tvalue = this.defaultValue;\n\tif(tiddler) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue);\n\t\t} else {\n\t\t\tif($tw.utils.hop(tiddler.fields,fieldName)) {\n\t\t\t\tvalue = tiddler.fields[fieldName] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.defaultValue;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.getActionVariables = function(options) {\n\toptions = options || {};\n\tvar hasChanged = (this.startValue !== this.inputDomNode.value) ? \"yes\" : \"no\";\n\t// Trigger actions. Use variables = {key:value, key:value ...}\n\t// the \"value\" is needed.\n\treturn $tw.utils.extend({\"actionValue\": this.inputDomNode.value, \"actionValueHasChanged\": hasChanged}, options);\n}\n\n// actionsStart\nRangeWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.mouseDown = true; // TODO remove once IE is gone.\n\tthis.startValue = this.inputDomNode.value; // TODO remove this line once IE is gone!\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseDown) {\n\t\tvar variables = this.getActionVariables() // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsMouseDown,this,event,variables);\n\t}\n}\n\n// actionsStop\nRangeWidget.prototype.handleMouseUpEvent = function(event) {\n\tthis.mouseDown = false; // TODO remove once IE is gone.\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsMouseUp) {\n\t\tvar variables = this.getActionVariables()\n\t\tthis.invokeActionString(this.actionsMouseUp,this,event,variables);\n\t}\n\t// TODO remove the following if() once IE is gone!\n\tif ($tw.browser.isIE) {\n\t\tif (this.startValue !== this.inputDomNode.value) {\n\t\t\tthis.handleChangeEvent(event);\n\t\t\tthis.startValue = this.inputDomNode.value;\n\t\t}\n\t}\n}\n\nRangeWidget.prototype.handleChangeEvent = function(event) {\n\tif (this.mouseDown) {  // TODO refactor this function once IE is gone.\n\t\tthis.handleInputEvent(event);\n\t}\n};\n\nRangeWidget.prototype.handleInputEvent = function(event) {\n\tthis.handleEvent(event);\n\t// Trigger actions\n\tif(this.actionsInput) {\n\t\t// \"tiddler\" parameter may be missing. See .execute() below\n\t\tvar variables = this.getActionVariables({\"actionValueHasChanged\": \"yes\"}) // TODO this line will go into the function call below.\n\t\tthis.invokeActionString(this.actionsInput,this,event,variables);\n\t}\n};\n\nRangeWidget.prototype.handleEvent = function(event) {\n\tif(this.getValue() !== this.inputDomNode.value) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,\"\",this.tiddlerIndex,this.inputDomNode.value);\n\t\t} else {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// TODO remove the next 1 lines once IE is gone!\n\tthis.mouseUp = true; // Needed for IE10\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\",\"text\");\n\tthis.tiddlerIndex = this.getAttribute(\"index\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\",\"\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\tthis.isDisabled = this.getAttribute(\"disabled\",\"no\");\n\t// Actions since 5.1.23\n\t// Next 2 only fire once!\n\tthis.actionsMouseDown = this.getAttribute(\"actionsStart\",\"\");\n\tthis.actionsMouseUp = this.getAttribute(\"actionsStop\",\"\");\n\t// Input fires very often!\n\tthis.actionsInput = this.getAttribute(\"actions\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tvar value = this.getValue();\n\t\t\tif(this.inputDomNode.value !== value) {\n\t\t\t\tthis.inputDomNode.value = value;\n\t\t\t}\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/raw.js": {
            "title": "$:/core/modules/widgets/raw.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/reveal.js": {
            "title": "$:/core/modules/widgets/reveal.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tthis.domNode = domNode;\n\tthis.assignDomNodeClasses();\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"belowright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\t\t\t\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tcase \"aboveleft\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\t\t\t\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\t// class attribute handled in assignDomNodeClasses()\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\tthis.updatePopupPosition = this.getAttribute(\"updatePopupPosition\",\"no\") === \"yes\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t    defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\nRevealWidget.prototype.assignDomNodeClasses = function() {\n\tvar classes = this.getAttribute(\"class\",\"\").split(\" \");\n\tclasses.push(\"tc-reveal\");\n\tthis.domNode.className = classes.join(\" \");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if(this.type === \"popup\" && this.updatePopupPosition && (changedTiddlers[this.state] || changedTiddlers[this.stateTitle])) {\n\t\t\tthis.positionPopup(this.domNode);\n\t\t}\n\t\tif(changedAttributes.style) {\n\t\t\tthis.domNode.style = this.getAttribute(\"style\",\"\");\n\t\t}\n\t\tif(changedAttributes[\"class\"]) {\n\t\t\tthis.assignDomNodeClasses();\n\t\t}\t\t\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n        $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/scrollable.js": {
            "title": "$:/core/modules/widgets/scrollable.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tif(event.paramObject && event.paramObject.selector) {\n\t\tthis.scrollSelectorIntoView(null,event.paramObject.selector);\n\t} else {\n\t\tthis.scrollIntoView(event.target);\t\t\t\n\t}\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\tsrcWindow = element ? element.ownerDocument.defaultView : window;\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\nScrollableWidget.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {\n\tbaseElement = baseElement || document.body;\n\tvar element = baseElement.querySelector(selector);\n\tif(element) {\n\t\tthis.scrollIntoView(element,callback);\t\t\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/select.js": {
            "title": "$:/core/modules/widgets/select.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tselect.children[i].selected = values.indexOf(select.children[i].value) !== -1\n\t\t}\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex || changedAttributes.selectTooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/set.js": {
            "title": "$:/core/modules/widgets/set.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t   (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/text.js": {
            "title": "$:/core/modules/widgets/text.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/tiddler.js": {
            "title": "$:/core/modules/widgets/tiddler.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/transclude.js": {
            "title": "$:/core/modules/widgets/transclude.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\tthis.recursionMarker = this.getAttribute(\"recursionMarker\",\"yes\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tif(this.recursionMarker === \"yes\") {\n\t\tthis.setVariable(\"transclusion\",recursionMarker);\n\t}\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/vars.js": {
            "title": "$:/core/modules/widgets/vars.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n  <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/view.js": {
            "title": "$:/core/modules/widgets/view.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/widget.js": {
            "title": "$:/core/modules/widgets/widget.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning  that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\toriginalValue = variable.value,\n\t\t\tvalue = originalValue,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params,\n\t\t\tsrcVariable: variable,\n\t\t\tisCacheable: originalValue === value\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\tevent.widget = event.widget || this;\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\n/*\nExecute action tiddlers by tag\n*/\nWidget.prototype.invokeActionsByTag = function(tag,event,variables) {\n\tvar self = this;\n\t$tw.utils.each(self.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\tself.invokeActionString(self.wiki.getTiddlerText(title),self,event,variables);\n\t});\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/widgets/wikify.js": {
            "title": "$:/core/modules/widgets/wikify.js",
            "text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "widget"
        },
        "$:/core/modules/wiki-bulkops.js": {
            "title": "$:/core/modules/wiki-bulkops.js",
            "text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/core/modules/wiki.js": {
            "title": "$:/core/modules/wiki.js",
            "text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type]  || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.isBinaryTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles.  Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x :  x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked within the given parse tree\n */\nexports.extractLinks = function(parseTreeRoot) {\n\t// Count up the links\n\tvar links = [],\n\t\tcheckParseTree = function(parseTree) {\n\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcheckParseTree(parseTreeRoot);\n\treturn links;\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\tif(parser) {\n\t\t\treturn self.extractLinks(parser.tree);\n\t\t}\n\t\treturn [];\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinksIndexer = this.getIndexer(\"BacklinksIndexer\"),\n\t\tbacklinks = backlinksIndexer && backlinksIndexer.lookup(targetTitle);\n\n\tif(!backlinks) {\n\t\tbacklinks = [];\n\t\tthis.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self.getTiddlerLinks(title);\n\t\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\t\tbacklinks.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\t// Given a title, this function will place it in the correct location\n\t// within titles.\n\tfunction moveItemInList(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\t// if this title is placed relative\n\t\t\t\t\t// to another title, make sure that\n\t\t\t\t\t// title is placed before we place\n\t\t\t\t\t// this one.\n\t\t\t\t\tmoveItemInList(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\t// Same deal\n\t\t\t\t\tmoveItemInList(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If a new position is specified, let's move it\n\t\t\t\tif (newPos !== -1) {\n\t\t\t\t\t// get its current Pos, and make sure\n\t\t\t\t\t// sure that it's _actually_ in the list\n\t\t\t\t\t// and that it would _actually_ move\n\t\t\t\t\t// (#4275) We don't bother calling\n\t\t\t\t\t//         indexOf unless we have a new\n\t\t\t\t\t//         position to work with\n\t\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\t\t// move it!\n\t\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tmoveItemInList(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter,spaces) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tspaces = (spaces === undefined) ? $tw.config.preferences.jsonSpaces : spaces,\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,spaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.recursionMarker : optional flag to set a recursion marker, defaults to \"yes\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\trecursionMarker: {\n\t\t\t\t\tname: \"recursionMarker\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: options.recursionMarker || \"yes\"\n\t\t\t\t\t},\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn this.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(!tiddler.hasField(\"_is_skinny\")) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text || \"\";\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\"};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create  a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\t\n\tconsole.log(\"$tw.wiki.addToHistory() is deprecated since V5.1.23! Use the this.story.addToHistory() from the story-object!\")\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\n\tconsole.log(\"$tw.wiki.addToStory() is deprecated since V5.1.23! Use the this.story.addToStory() from the story-object!\")\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n// Determine whether a plugin by title is dynamically loadable\nexports.doesPluginRequireReload = function(title) {\n\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\n};\n\n// Determine whether a plugin info structure is dynamically loadable\nexports.doesPluginInfoRequireReload = function(pluginInfo) {\n\tif(pluginInfo) {\n\t\tvar foundModule = false;\n\t\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\n\t\t\tif(tiddler.type === \"application/javascript\" && $tw.utils.hop(tiddler,\"module-type\")) {\n\t\t\t\tfoundModule = true;\n\t\t\t}\n\t\t});\n\t\treturn foundModule;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.slugify = function(title,options) {\n\tvar tiddler = this.getTiddler(title),\n\t\tslug;\n\tif(tiddler && tiddler.fields.slug) {\n\t\tslug = tiddler.fields.slug;\n\t} else {\n\t\tslug = $tw.utils.transliterate(title.toString().toLowerCase()) // Replace diacritics with basic lowercase ASCII\n\t\t\t.replace(/\\s+/g,\"-\")                                       // Replace spaces with -\n\t\t\t.replace(/[^\\w\\-\\.]+/g,\"\")                                 // Remove all non-word chars except dash and dot\n\t\t\t.replace(/\\-\\-+/g,\"-\")                                     // Replace multiple - with single -\n\t\t\t.replace(/^-+/,\"\")                                         // Trim - from start of text\n\t\t\t.replace(/-+$/,\"\");                                        // Trim - from end of text\n\t}\n\t// If the resulting slug is blank (eg because the title is just punctuation characters)\n\tif(!slug) {\n\t\t// ...then just use the character codes of the title\n\t\tvar result = [];\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tresult.push(char.charCodeAt(0).toString());\n\t\t});\n\t\tslug = result.join(\"-\");\n\t}\n\treturn slug;\n};\n\n})();\n\n",
            "type": "application/javascript",
            "module-type": "wikimethod"
        },
        "$:/palettes/Blanca": {
            "title": "$:/palettes/Blanca",
            "name": "Blanca",
            "description": "A clean white palette to let you focus",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Blue": {
            "title": "$:/palettes/Blue",
            "name": "Blue",
            "description": "A blue theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/Muted": {
            "title": "$:/palettes/Muted",
            "name": "Muted",
            "description": "Bright tiddlers on a muted background",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastLight": {
            "title": "$:/palettes/ContrastLight",
            "name": "Contrast (Light)",
            "description": "High contrast and unambiguous (light version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/ContrastDark": {
            "title": "$:/palettes/ContrastDark",
            "name": "Contrast (Dark)",
            "description": "High contrast and unambiguous (dark version)",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/CupertinoDark": {
            "title": "$:/palettes/CupertinoDark",
            "tags": "$:/tags/Palette",
            "name": "Cupertino Dark",
            "description": "A macOS inspired dark palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #FF453A\nalert-border: #FF453A\nalert-highlight: #FFD60A\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #282828\nblockquote-bar: <<colour page-background>>\nbutton-foreground: <<colour background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #FF453A\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour tiddler-info-background>>\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: #3F638B\ndropdown-tab-background: #323232\ndropzone-background: #30D158\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #BF5AF2\nexternal-link-foreground: #32D74B\nforeground: #FFFFFF\nmenubar-background: #464646\nmenubar-foreground: #ffffff\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: #98989D\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #323232\npre-background: #464646\npre-border: transparent\nprimary: #0A84FF\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour background>>\nsidebar-controls-foreground-hover: #FF9F0A\nsidebar-controls-foreground: #8E8E93\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: #3F638B\nsidebar-tab-background: <<colour background>>\nsidebar-tab-border-selected: <<colour background>>\nsidebar-tab-border: <<colour background>>\nsidebar-tab-divider: <<colour background>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: #ffffff\nstatic-alert-foreground: #B4B4B4\ntab-background-selected: #3F638B\ntab-background: <<colour page-background>>\ntab-border-selected: <<colour page-background>>\ntab-border: <<colour page-background>>\ntab-divider: <<colour page-background>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #464646\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #48484A\ntag-foreground: #323232\ntiddler-background: <<colour background>>\ntiddler-border: transparent\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: #48484A\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #1E1E1E\ntiddler-info-border: #1E1E1E\ntiddler-info-tab-background: #3F638B\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: #464646\nselection-background: #3F638B\nselection-foreground: #ffffff\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #3F638B\nwikilist-button-foreground: <<colour foreground>>\nwikilist-button-open: #32D74B\nwikilist-button-open-hover: #32D74B\nwikilist-button-reveal: #0A84FF\nwikilist-button-reveal-hover: #0A84FF\nwikilist-button-remove: #FF453A\nwikilist-button-remove-hover: #FF453A\nwikilist-droplink-dragover: #32D74B\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour foreground>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-url: <<colour muted-foreground>>\n"
        },
        "$:/palettes/DarkPhotos": {
            "title": "$:/palettes/DarkPhotos",
            "created": "20150402111612188",
            "description": "Good with dark photo backgrounds",
            "modified": "20150402112344080",
            "name": "DarkPhotos",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/DesertSand": {
            "title": "$:/palettes/DesertSand",
            "tags": "$:/tags/Palette",
            "name": "Desert Sand",
            "description": "A desert sand palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #E9E0C7\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour foreground>>\ncode-background: #F3EDDF\ncode-border: #C3BAA1\ncode-foreground: #ab3250\ndiff-delete-background: #bd8b8b\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #91c093\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ad3434\ndownload-background: #6ca16c\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #E9E0C7\ndropdown-tab-background: #BAB29C\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #313163\nexternal-link-foreground: #555592\nforeground: #2D2A23\nmenubar-background: #CDC2A6\nmenubar-foreground: #5A5446\nmessage-background: #ECE5CF\nmessage-border: #D6CBAA\nmessage-foreground: #5f6e7d\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #8A8885\nmodal-footer-background: #CDC2A6\nmodal-footer-border: #9D998E\nmodal-header-border: #9D998E\nmuted-foreground: #9D998E\nnotification-background: #F0E9D7\nnotification-border: #939189\npage-background: #e0d3af\npre-background: #D6CBAA\npre-border: #CDC2A6\nprimary: #5B6F55\nselection-background: #9D947B\nselection-foreground: <<colour foreground>>\nselect-tag-background: #F0E9D7\nselect-tag-foreground: #2D2A23\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #2D2A23\nsidebar-controls-foreground: #867F69\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #867F69\nsidebar-muted-foreground-hover: #706A58\nsidebar-muted-foreground: #B3A98C\nsidebar-tab-background-selected: #e0d3af\nsidebar-tab-background: #A6A193\nsidebar-tab-border-selected: #C3BAA1\nsidebar-tab-border: #C3BAA1\nsidebar-tab-divider: #CDC2A6\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #2D2A23\nsidebar-tiddler-link-foreground-hover: #433F35\nsidebar-tiddler-link-foreground: #706A58\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #A6A193\ntab-background-selected: #E9E0C7\ntab-background: #A6A193\ntab-border-selected: #C3BAA1\ntab-border: #C3BAA1\ntab-divider: #CDC2A6\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #2D2A23\ntable-border: #9D998E\ntable-footer-background: #8A8885\ntable-header-background: #B0AA98\ntag-background: #706A58\ntag-foreground: #E3D7B7\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #9D947B\ntiddler-controls-foreground-selected: #706A58\ntiddler-controls-foreground: #C3BAA1\ntiddler-editor-background: #E9E0C7\ntiddler-editor-border-image: #A6A193\ntiddler-editor-border: #A6A193\ntiddler-editor-fields-even: #D6CBAA\ntiddler-editor-fields-odd: #C3BAA1\ntiddler-info-background: #E3D7B7\ntiddler-info-border: #BAB29C\ntiddler-info-tab-background: #E9E0C7\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #867F69\ntiddler-title-foreground: #374464\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #8A8885\nvery-muted-foreground: #CDC2A6\nwikilist-background: <<colour page-background>>\nwikilist-item: #CDC2A6\nwikilist-info: #161512\nwikilist-title: #433F35\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #706A58\nwikilist-button-open: #7db66a\nwikilist-button-open-hover: #56a556\nwikilist-button-reveal: #5a6c9e\nwikilist-button-reveal-hover: #454591\nwikilist-button-remove: #bc5972\nwikilist-button-remove-hover: #814040\nwikilist-toolbar-background: #CDC2A6\nwikilist-toolbar-foreground: #2D2A23\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #A6A193\nwikilist-button-foreground: #161512\n"
        },
        "$:/palettes/GruvboxDark": {
            "title": "$:/palettes/GruvboxDark",
            "name": "Gruvbox Dark",
            "description": "Retro groove color scheme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "license": "https://github.com/morhetz/gruvbox",
            "text": "alert-background: #cc241d\nalert-border: #cc241d\nalert-highlight: #d79921\nalert-muted-foreground: #504945\nbackground: #3c3836\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #504945\ncode-border: #504945\ncode-foreground: #fb4934\ndiff-delete-background: #fb4934\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #b8bb26\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #fb4934\ndownload-background: #b8bb26\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #665c54\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ebdbb2\ndropdown-tab-background: #665c54\ndropzone-background: #98971a\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #d3869b\nexternal-link-foreground: #8ec07c\nforeground: #fbf1c7\nmenubar-background: #504945\nmenubar-foreground: <<colour foreground>>\nmessage-background: #83a598\nmessage-border: #83a598\nmessage-foreground: #3c3836\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #504945\nmodal-footer-background: #3c3836\nmodal-footer-border: #3c3836\nmodal-header-border: #3c3836\nmuted-foreground: #d5c4a1\nnotification-background: <<colour primary>>\nnotification-border: <<colour primary>>\npage-background: #282828\npre-background: #504945\npre-border: #504945\nprimary: #d79921\nselect-tag-background: #665c54\nselect-tag-foreground: <<colour foreground>>\nselection-background: #458588\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #7c6f64\nsidebar-controls-foreground: #504945\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #fbf1c7\nsidebar-muted-foreground-hover: #7c6f64\nsidebar-muted-foreground: #504945\nsidebar-tab-background-selected: #bdae93\nsidebar-tab-background: #3c3836\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #bdae93\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #282828\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #458588\nsidebar-tiddler-link-foreground: #98971a\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ebdbb2\ntab-background: #665c54\ntab-border-selected: #665c54\ntab-border: #665c54\ntab-divider: #bdae93\ntab-foreground-selected: #282828\ntab-foreground: #ebdbb2\ntable-border: #7c6f64\ntable-footer-background: #665c54\ntable-header-background: #504945\ntag-background: #d3869b\ntag-foreground: #282828\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #7c6f64\ntiddler-controls-foreground-selected: <<colour primary>>\ntiddler-controls-foreground: #665c54\ntiddler-editor-background: #32302f\ntiddler-editor-border-image: #282828\ntiddler-editor-border: #282828\ntiddler-editor-fields-even: #504945\ntiddler-editor-fields-odd: #7c6f64\ntiddler-info-background: #32302f\ntiddler-info-border: #ebdbb2\ntiddler-info-tab-background: #ebdbb2\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #7c6f64\ntiddler-title-foreground: #a89984\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #504945\nvery-muted-foreground: #bdae93\nwikilist-background: <<colour page-background>>\nwikilist-button-background: #acacac\nwikilist-button-foreground: <<colour button-foreground>>\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: <<colour muted-foreground>>\nwikilist-button-open-hover: <<colour primary>>\nwikilist-button-open: <<colour dropzone-background>>\nwikilist-button-remove: <<colour dirty-indicator>>\nwikilist-button-remove-hover: <<colour alert-background>>\nwikilist-droplink-dragover: <<colour dropzone-background>>\nwikilist-button-reveal: <<colour sidebar-tiddler-link-foreground-hover>>\nwikilist-button-reveal-hover: <<colour message-background>>\n"
        },
        "$:/palettes/Nord": {
            "title": "$:/palettes/Nord",
            "name": "Nord",
            "description": "An arctic, north-bluish color palette.",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
            "text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-foreground: <<colour page-background>>\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmenubar-background: #2E3440\nmenubar-foreground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nselection-background: #5E81AC\nselection-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour page-background>>\nsidebar-controls-foreground-hover: #D8DEE9\nsidebar-controls-foreground: #4C566A\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #3b4252\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\nwikilist-background: <<colour page-background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-item: <<colour background>>\nwikilist-title: <<colour foreground>>\nwikilist-info: <<colour muted-foreground>>\nwikilist-button-open: #A3BE8C\nwikilist-button-open-hover: #A3BE8C\nwikilist-button-reveal: #81A1C1\nwikilist-button-reveal-hover: #81A1C1\nwikilist-button-remove: #B48EAD\nwikilist-button-remove-hover: #B48EAD\n"
        },
        "$:/palettes/Rocker": {
            "title": "$:/palettes/Rocker",
            "name": "Rocker",
            "description": "A dark theme",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarFlare": {
            "title": "$:/palettes/SolarFlare",
            "name": "Solar Flare",
            "description": "Warm, relaxing earth colours",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n    download-foreground: <<colour background>>\n    dragger-foreground: <<colour background>>\n    dropdown-background: <<colour background>>\n    modal-background: <<colour background>>\n    sidebar-foreground-shadow: <<colour background>>\n    tiddler-background: <<colour background>>\n    tiddler-border: <<colour background>>\n    tiddler-link-background: <<colour background>>\n    tab-background-selected: <<colour background>>\n        dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n    dragger-background: <<colour foreground>>\n    tab-foreground: <<colour foreground>>\n        tab-foreground-selected: <<colour tab-foreground>>\n            sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n        sidebar-tab-foreground: <<colour tab-foreground>>\n    sidebar-button-foreground: <<colour foreground>>\n    sidebar-controls-foreground: <<colour foreground>>\n    sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n    alert-muted-foreground: <<colour base01>>\n: base00\n    code-foreground: <<colour base00>>\n    message-foreground: <<colour base00>>\n    tag-foreground: <<colour base00>>\n: base0\n    sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n    muted-foreground: <<colour base1>>\n        blockquote-bar: <<colour muted-foreground>>\n        dropdown-border: <<colour muted-foreground>>\n        sidebar-muted-foreground: <<colour muted-foreground>>\n        tiddler-title-foreground: <<colour muted-foreground>>\n            site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n    modal-footer-background: <<colour base2>>\n    page-background: <<colour base2>>\n        modal-backdrop: <<colour page-background>>\n        notification-background: <<colour page-background>>\n        code-background: <<colour page-background>>\n            code-border: <<colour code-background>>\n        pre-background: <<colour page-background>>\n            pre-border: <<colour pre-background>>\n        sidebar-tab-background-selected: <<colour page-background>>\n    table-header-background: <<colour base2>>\n    tag-background: <<colour base2>>\n    tiddler-editor-background: <<colour base2>>\n    tiddler-info-background: <<colour base2>>\n    tiddler-info-tab-background: <<colour base2>>\n    tab-background: <<colour base2>>\n        dropdown-tab-background: <<colour tab-background>>\n: base3\n    alert-background: <<colour base3>>\n    message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n    alert-highlight: <<colour magenta>>\n: violet\n    external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n    tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n    external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n    primary: <<colour blue-muted>>\n        download-background: <<colour primary>>\n        tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n    modal-footer-border: <<colour tab-border>>\n    modal-header-border: <<colour tab-border>>\n    notification-border: <<colour tab-border>>\n    sidebar-tab-border: <<colour tab-border>>\n    tab-border-selected: <<colour tab-border>>\n        sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n    sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
        },
        "$:/palettes/SolarizedDark": {
            "title": "$:/palettes/SolarizedDark",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Precision dark colors for machines and people",
            "license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
            "name": "SolarizedDark",
            "text": "alert-background: #073642\nalert-border: #93a1a1\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #073642\nblockquote-bar: #d33682\nbutton-background: #073642\nbutton-border: #586e75\nbutton-foreground: #93a1a1\ncode-background: #073642\ncode-border: #586e75\ncode-foreground: #93a1a1\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #073642\ndragger-background: #073642\ndragger-foreground: #839496\ndropdown-background: #073642\ndropdown-border: #93a1a1\ndropdown-tab-background: #002b36\ndropdown-tab-background-selected: #073642\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover:\nexternal-link-foreground-visited: #268bd2\nforeground: #839496\nmessage-background: #002b36\nmessage-border: #586e75\nmessage-foreground: #839496\nmodal-backdrop: #657b83\nmodal-background: #002b36\nmodal-border: #586e75\nmodal-footer-background: #073642\nmodal-footer-border: #586e75\nmodal-header-border: #586e75\nmuted-foreground: #93a1a1\nnotification-background: #002b36\nnotification-border: #586e75\npage-background: #073642\npre-background: inherit\npre-border: #657b83\nprimary: #859900\nselect-tag-background: #002b36\nselect-tag-foreground: #839496\nsidebar-button-foreground: #93a1a1\nsidebar-controls-foreground: #93a1a1\nsidebar-controls-foreground-hover: #eee8d5\nsidebar-foreground: #93a1a1\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #839496\nsidebar-muted-foreground-hover: #93a1a1\nsidebar-tab-background: #002b36\nsidebar-tab-background-selected: #073642\nsidebar-tab-border: #073642\nsidebar-tab-border-selected: #839496\nsidebar-tab-divider: #002b36\nsidebar-tab-foreground: #657b83\nsidebar-tab-foreground-selected: #93a1a1\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #eee8d5\nsite-title-foreground: #d33682\nstatic-alert-foreground: #93a1a1\ntab-background: #073642\ntab-background-selected: #002b36\ntab-border: #586e75\ntab-border-selected: #93a1a1\ntab-divider: #93a1a1\ntab-foreground: #839496\ntab-foreground-selected: #93a1a1\ntable-border: #586e75\ntable-footer-background: #073642\ntable-header-background: #073642\ntag-background: #b58900\ntag-foreground: #002b36\ntiddler-background: #002b36\ntiddler-border: #586e75\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #002b36\ntiddler-editor-border: #073642\ntiddler-editor-border-image: #002b36\ntiddler-editor-fields-even: #002b36\ntiddler-editor-fields-odd: #073642\ntiddler-info-background: #073642\ntiddler-info-border: #657b83\ntiddler-info-tab-background: #002b36\ntiddler-link-background: #002b36\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #839496\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #839496\ntoolbar-close-button: #839496\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #839496\ntoolbar-edit-button: #839496\ntoolbar-info-button: #839496\ntoolbar-new-button: #839496\ntoolbar-options-button: #839496\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #586e75\n"
        },
        "$:/palettes/SolarizedLight": {
            "title": "$:/palettes/SolarizedLight",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Precision colors for machines and people",
            "license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
            "name": "SolarizedLight",
            "text": "alert-background: #eee8d5\nalert-border: #586e75\nalert-highlight: #d33682\nalert-muted-foreground: #d33682\nbackground: #eee8d5\nblockquote-bar: #d33682\nbutton-background: #eee8d5\nbutton-border: #93a1a1\nbutton-foreground: #586e75\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #586e75\ndirty-indicator: inherit\ndownload-background: #859900\ndownload-foreground: #eee8d5\ndragger-background: #eee8d5\ndragger-foreground: #657b83\ndropdown-background: #eee8d5\ndropdown-border: #586e75\ndropdown-tab-background: #fdf6e3\ndropdown-tab-background-selected: #eee8d5\ndropzone-background: #859900\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: #268bd2\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #268bd2\nforeground: #657b83\nmessage-background: #fdf6e3\nmessage-border: #93a1a1\nmessage-foreground: #657b83\nmodal-backdrop: #839496\nmodal-background: #fdf6e3\nmodal-border: #93a1a1\nmodal-footer-background: #eee8d5\nmodal-footer-border: #93a1a1\nmodal-header-border: #93a1a1\nmuted-foreground: #586e75\nnotification-background: #fdf6e3\nnotification-border: #93a1a1\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #839496\nprimary: #859900\nselect-tag-background: #fdf6e3\nselect-tag-foreground: #657b83\nsidebar-button-foreground: #586e75\nsidebar-controls-foreground: #586e75\nsidebar-controls-foreground-hover: #d33682\nsidebar-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: #657b83\nsidebar-muted-foreground-hover: #586e75\nsidebar-tab-background: #fdf6e3\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-border: #eee8d5\nsidebar-tab-border-selected: #657b83\nsidebar-tab-divider: #fdf6e3\nsidebar-tab-foreground: #839496\nsidebar-tab-foreground-selected: #586e75\nsidebar-tiddler-link-foreground: #2aa198\nsidebar-tiddler-link-foreground-hover: #002b36\nsite-title-foreground: #d33682\nstatic-alert-foreground: #586e75\ntab-background: #eee8d5\ntab-background-selected: #fdf6e3\ntab-border: #93a1a1\ntab-border-selected: #586e75\ntab-divider: #586e75\ntab-foreground: #657b83\ntab-foreground-selected: #586e75\ntable-border: #93a1a1\ntable-footer-background: #eee8d5\ntable-header-background: #eee8d5\ntag-background: #b58900\ntag-foreground: #fdf6e3\ntiddler-background: #fdf6e3\ntiddler-border: #93a1a1\ntiddler-controls-foreground: inherit\ntiddler-controls-foreground-hover: #d33682\ntiddler-controls-foreground-selected: #2aa198\ntiddler-editor-background: #fdf6e3\ntiddler-editor-border: #eee8d5\ntiddler-editor-border-image: #fdf6e3\ntiddler-editor-fields-even: #fdf6e3\ntiddler-editor-fields-odd: #eee8d5\ntiddler-info-background: #eee8d5\ntiddler-info-border: #839496\ntiddler-info-tab-background: #fdf6e3\ntiddler-link-background: #fdf6e3\ntiddler-link-foreground: #2aa198\ntiddler-subtitle-foreground: #657b83\ntiddler-title-foreground: #d33682\ntoolbar-cancel-button: #657b83\ntoolbar-close-button: #657b83\ntoolbar-delete-button: #dc322f\ntoolbar-done-button: #657b83\ntoolbar-edit-button: #657b83\ntoolbar-info-button: #657b83\ntoolbar-new-button: #657b83\ntoolbar-options-button: #657b83\ntoolbar-save-button: inherit\nuntagged-background: #586e75\nvery-muted-foreground: #93a1a1\n"
        },
        "$:/palettes/SpartanDay": {
            "title": "$:/palettes/SpartanDay",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Cold, spartan day colors",
            "name": "Spartan Day",
            "text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
        },
        "$:/palettes/SpartanNight": {
            "title": "$:/palettes/SpartanNight",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "description": "Dark spartan colors",
            "name": "Spartan Night",
            "text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
        },
        "$:/palettes/Twilight": {
            "title": "$:/palettes/Twilight",
            "tags": "$:/tags/Palette",
            "author": "Thomas Elmiger",
            "type": "application/x-tiddler-dictionary",
            "name": "Twilight",
            "description": "Delightful, soft darkness.",
            "text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
        },
        "$:/palettes/Vanilla": {
            "title": "$:/palettes/Vanilla",
            "name": "Vanilla",
            "description": "Pale and unobtrusive",
            "tags": "$:/tags/Palette",
            "type": "application/x-tiddler-dictionary",
            "text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselection-background:\nselection-foreground:\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\nwikilist-background: #e5e5e5\nwikilist-item: #fff\nwikilist-info: #000\nwikilist-title: #666\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #aaa\nwikilist-button-open: #4fb82b\nwikilist-button-open-hover: green\nwikilist-button-reveal: #5778d8\nwikilist-button-reveal-hover: blue\nwikilist-button-remove: #d85778\nwikilist-button-remove-hover: red\nwikilist-toolbar-background: #d3d3d3\nwikilist-toolbar-foreground: #888\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #acacac\nwikilist-button-foreground: #000\n"
        },
        "$:/core/readme": {
            "title": "$:/core/readme",
            "text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
        },
        "$:/library/sjcl.js/license": {
            "title": "$:/library/sjcl.js/license",
            "type": "text/plain",
            "text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
        },
        "$:/core/templates/MOTW.html": {
            "title": "$:/core/templates/MOTW.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com -->&#13;&#10;"
        },
        "$:/core/templates/alltiddlers.template.html": {
            "title": "$:/core/templates/alltiddlers.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
        },
        "$:/core/templates/canonical-uri-external-image": {
            "title": "$:/core/templates/canonical-uri-external-image",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-raw": {
            "title": "$:/core/templates/canonical-uri-external-raw",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
        },
        "$:/core/templates/canonical-uri-external-text": {
            "title": "$:/core/templates/canonical-uri-external-text",
            "text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
        },
        "$:/core/templates/css-tiddler": {
            "title": "$:/core/templates/css-tiddler",
            "text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
        },
        "$:/core/templates/exporters/CsvFile": {
            "title": "$:/core/templates/exporters/CsvFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/CsvFile}}",
            "extension": ".csv",
            "text": "<$macrocall $name=\"csvtiddlers\" filter=<<exportFilter>> format=\"quoted-comma-sep\" $output=\"text/raw\"/>\n"
        },
        "$:/core/templates/exporters/JsonFile": {
            "title": "$:/core/templates/exporters/JsonFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/JsonFile}}",
            "extension": ".json",
            "text": "<$macrocall $name=\"jsontiddlers\" filter=<<exportFilter>> $output=\"text/raw\"/>\n"
        },
        "$:/core/templates/exporters/StaticRiver": {
            "title": "$:/core/templates/exporters/StaticRiver",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/StaticRiver}}",
            "extension": ".html",
            "text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river tc-static-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
        },
        "$:/core/templates/exporters/StaticRiver/Content": {
            "title": "$:/core/templates/exporters/StaticRiver/Content",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
        },
        "$:/core/templates/exporters/TidFile": {
            "title": "$:/core/templates/exporters/TidFile",
            "tags": "$:/tags/Exporter",
            "description": "{{$:/language/Exporters/TidFile}}",
            "extension": ".tid",
            "condition": "[<count>compare:lte[1]]",
            "text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
        },
        "$:/core/save/all-external-js": {
            "title": "$:/core/save/all-external-js",
            "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
        },
        "$:/core/templates/tiddlywiki5.js": {
            "title": "$:/core/templates/tiddlywiki5.js",
            "text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
        },
        "$:/core/templates/tiddlywiki5.js/tiddlers": {
            "title": "$:/core/templates/tiddlywiki5.js/tiddlers",
            "text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n`\n"
        },
        "$:/core/templates/tiddlywiki5-external-js.html": {
            "title": "$:/core/templates/tiddlywiki5-external-js.html",
            "text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
        },
        "$:/core/templates/html-div-skinny-tiddler": {
            "title": "$:/core/templates/html-div-skinny-tiddler",
            "text": "<!--\n\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre></pre>\n</div>`\n"
        },
        "$:/core/templates/html-div-tiddler": {
            "title": "$:/core/templates/html-div-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
        },
        "$:/core/templates/html-tiddler": {
            "title": "$:/core/templates/html-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
        },
        "$:/core/templates/javascript-tiddler": {
            "title": "$:/core/templates/javascript-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
        },
        "$:/core/templates/json-tiddler": {
            "title": "$:/core/templates/json-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
        },
        "$:/core/templates/module-tiddler": {
            "title": "$:/core/templates/module-tiddler",
            "text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
        },
        "$:/core/templates/plain-text-tiddler": {
            "title": "$:/core/templates/plain-text-tiddler",
            "text": "<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/raw-static-tiddler": {
            "title": "$:/core/templates/raw-static-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
        },
        "$:/core/save/all": {
            "title": "$:/core/save/all",
            "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[prefix[$:/temp/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/empty": {
            "title": "$:/core/save/empty",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-all": {
            "title": "$:/core/save/lazy-all",
            "text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/save/lazy-images": {
            "title": "$:/core/save/lazy-images",
            "text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[is[image]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
        },
        "$:/core/templates/server/static.sidebar.wikitext": {
            "title": "$:/core/templates/server/static.sidebar.wikitext",
            "text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
        },
        "$:/core/templates/server/static.tiddler.html": {
            "title": "$:/core/templates/server/static.tiddler.html",
            "text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
        },
        "$:/core/templates/server/static.tiddler.wikitext": {
            "title": "$:/core/templates/server/static.tiddler.wikitext",
            "text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
        },
        "$:/core/templates/single.tiddler.window": {
            "title": "$:/core/templates/single.tiddler.window",
            "text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
        },
        "$:/core/templates/split-recipe": {
            "title": "$:/core/templates/split-recipe",
            "text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
        },
        "$:/core/templates/static-tiddler": {
            "title": "$:/core/templates/static-tiddler",
            "text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
        },
        "$:/core/templates/static.area": {
            "title": "$:/core/templates/static.area",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n<!-- ensure splash screen isn't shown when JS is disabled -->\n`<style>\n.tc-remove-when-wiki-loaded {display: none;}\n</style>`\n"
        },
        "$:/core/templates/static.content": {
            "title": "$:/core/templates/static.content",
            "text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
        },
        "$:/core/templates/static.template.css": {
            "title": "$:/core/templates/static.template.css",
            "text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
        },
        "$:/core/templates/static.template.html": {
            "title": "$:/core/templates/static.template.html",
            "type": "text/vnd.tiddlywiki-html",
            "text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
        },
        "$:/core/templates/static.tiddler.html": {
            "title": "$:/core/templates/static.tiddler.html",
            "text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river tc-static-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`\n"
        },
        "$:/core/templates/store.area.template.html": {
            "title": "$:/core/templates/store.area.template.html",
            "text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n<$list filter={{{ [<skinnySaveTiddlerFilter>] }}} template=\"$:/core/templates/html-div-skinny-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
        },
        "$:/core/templates/tid-tiddler": {
            "title": "$:/core/templates/tid-tiddler",
            "text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
        },
        "$:/core/templates/tiddler-metadata": {
            "title": "$:/core/templates/tiddler-metadata",
            "text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
        },
        "$:/core/templates/tiddlywiki5.html": {
            "title": "$:/core/templates/tiddlywiki5.html",
            "text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
        },
        "$:/core/templates/version": {
            "title": "$:/core/templates/version",
            "text": "<<version>>"
        },
        "$:/core/templates/wikified-tiddler": {
            "title": "$:/core/templates/wikified-tiddler",
            "text": "<$transclude />"
        },
        "$:/core/ui/AboveStory/tw2-plugin-check": {
            "title": "$:/core/ui/AboveStory/tw2-plugin-check",
            "tags": "$:/tags/AboveStory",
            "text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/Actions/new-image": {
            "title": "$:/core/ui/Actions/new-image",
            "tags": "$:/tags/Actions",
            "description": "create a new image tiddler",
            "text": "\\define get-type()\nimage/$(imageType)$\n\\end\n\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars imageType={{$:/config/NewImageType}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>> tags=<<get-tags>>/>\n</$vars>\n"
        },
        "$:/core/ui/Actions/new-journal": {
            "title": "$:/core/ui/Actions/new-journal",
            "tags": "$:/tags/Actions",
            "description": "create a new journal tiddler",
            "text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} textFieldTags={{$:/config/NewJournal/Tags}} tagsFieldTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<get-tags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
        },
        "$:/core/ui/Actions/new-tiddler": {
            "title": "$:/core/ui/Actions/new-tiddler",
            "tags": "$:/tags/Actions",
            "description": "create a new empty tiddler",
            "text": "\\define get-tags() $(textFieldTags)$ $(tagsFieldTags)$\n<$vars textFieldTags={{$:/config/NewTiddler/Tags}} tagsFieldTags={{$:/config/NewTiddler/Tags!!tags}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<get-tags>>/>\n</$vars>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter": {
            "title": "$:/core/ui/AdvancedSearch/Filter",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Filter/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch/input}!match{$:/temp/advancedsearch}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\" \n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/temp/advancedsearch]]\" firstSearchFilterField=\"text\" \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tinputCancelActions=<<cancel-search-actions>>/>\n</$keyboard>\n</$keyboard>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</div>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text=<<navigateTo>>/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param='.tc-advanced-search input' />\"\"\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
            "title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
            "tags": "$:/tags/AdvancedSearch/FilterButton",
            "text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Shadows": {
            "title": "$:/core/ui/AdvancedSearch/Shadows",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Shadows/Caption}}",
            "first-search-filter": "[all[shadows]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]",
            "text": "\\define lingo-base() $:/language/Search/\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/Shadows]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>>  filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/Standard": {
            "title": "$:/core/ui/AdvancedSearch/Standard",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/Standard/Caption}}",
            "text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define next-search-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/advancedsearch\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"shift-alt-Right\" actions=<<next-search-tab>>>\n<$keyboard key=\"shift-alt-Left\" actions=<<next-search-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\" type=\"search\"\n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"\n\t\tfilterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$vars userInput={{{ [[$:/temp/advancedsearch]get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} searchListState=\"$:/temp/advancedsearch/selected-item\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/standard/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/advancedsearch\" />\n</$list>\n</$vars>\n</$list>\n</$reveal>\n"
        },
        "$:/core/ui/AdvancedSearch/System": {
            "title": "$:/core/ui/AdvancedSearch/System",
            "tags": "$:/tags/AdvancedSearch",
            "caption": "{{$:/language/Search/System/Caption}}",
            "first-search-filter": "[is[system]search<userInput>sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]",
            "text": "\\define lingo-base() $:/language/Search/\n\\define set-next-input-tab(beforeafter:\"after\",stateTitle,tag,defaultState,currentTabTiddler) <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab--1498284803\" tag=\"$:/tags/AdvancedSearch\" beforeafter=\"$beforeafter$\" defaultState=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define cancel-search-actions() <$list filter=\"[{$:/temp/advancedsearch}!match{$:/temp/advancedsearch/input}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/advancedsearch]] [[$:/temp/advancedsearch/input]] [[$:/temp/advancedsearch/selected-item]]\" />\"\"\"><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/advancedsearch}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/></$list><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\".tc-advanced-search input\"\"\"/>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=\"$:/temp/advancedsearch/input\" storeTitle=\"$:/temp/advancedsearch\"\n\t\trefreshTitle=\"$:/temp/advancedsearch/refresh\" selectionStateTitle=\"$:/temp/advancedsearch/selected-item\"\n\t\ttype=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} configTiddlerFilter=\"[[$:/core/ui/AdvancedSearch/System]]\"\n\t\tinputCancelActions=<<cancel-search-actions>> inputAcceptActions=<<input-accept-actions>> \n\t\tinputAcceptVariantActions=<<input-accept-variant-actions>> filterMinLength={{$:/config/Search/MinLength}}/>\n</$keyboard>\n</$keyboard>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]] -[[$:/temp/advancedsearch/input]] -[[$:/temp/advancedsearch/selected-item]]\">\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[[$:/temp/advancedsearch/selected-item]get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
        },
        "$:/AdvancedSearch": {
            "title": "$:/AdvancedSearch",
            "icon": "$:/core/images/advanced-search-button",
            "color": "#bbb",
            "text": "<div class=\"tc-advanced-search\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" default=\"$:/core/ui/AdvancedSearch/System\" actions=\"\"\"<$action-setfield $tiddler=\"$:/state/advancedsearch/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab--1498284803\"/>\n</div>\n"
        },
        "$:/core/ui/AlertTemplate": {
            "title": "$:/core/ui/AlertTemplate",
            "text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$wikify name=\"format\" text=<<lingo Tiddler/DateFormat>>>\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=<<format>>/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</$wikify>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
        },
        "$:/core/ui/BinaryWarning": {
            "title": "$:/core/ui/BinaryWarning",
            "text": "\\define lingo-base() $:/language/BinaryWarning/\n<<lingo Prompt>>\n"
        },
        "$:/core/ui/Components/plugin-info": {
            "title": "$:/core/ui/Components/plugin-info",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1>\n''<$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}}/>'': <$view field=\"description\"><$view field=\"title\"/></$view> $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
        },
        "$:/core/ui/Components/tag-link": {
            "title": "$:/core/ui/Components/tag-link",
            "text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
        },
        "$:/core/ui/ControlPanel/Advanced": {
            "title": "$:/core/ui/ControlPanel/Advanced",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
            "text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/TiddlerFields\" explicitState=\"$:/state/tab--959111941\"/>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Appearance": {
            "title": "$:/core/ui/ControlPanel/Appearance",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
            "text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Theme\" explicitState=\"$:/state/tab--1963855381\"/>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Basics": {
            "title": "$:/core/ui/ControlPanel/Basics",
            "tags": "$:/tags/ControlPanel/Info",
            "caption": "{{$:/language/ControlPanel/Basics/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-advanced-search input\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewTiddler/Tags\"><<lingo NewTiddler/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewTiddler/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$vars currentTiddler=\"$:/config/NewJournal/Tags\" tagField=\"text\">{{||$:/core/ui/EditTemplate/tags}}<$list filter=\"[<currentTiddler>tags[]] +[limit[1]]\" variable=\"ignore\"><$button tooltip={{$:/language/ControlPanel/Basics/RemoveTags/Hint}}><<lingo RemoveTags>><$action-listops $tiddler=<<currentTiddler>> $field=\"text\" $subfilter={{{ [<currentTiddler>get[tags]] }}}/><$action-setfield $tiddler=<<currentTiddler>> tags=\"\"/></$button></$list></$vars> |\n|<$link to=\"$:/config/AutoFocus\"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
        },
        "$:/core/ui/ControlPanel/EditorTypes": {
            "title": "$:/core/ui/ControlPanel/EditorTypes",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/Info": {
            "title": "$:/core/ui/ControlPanel/Info",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Info/Caption}}",
            "text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Basics\" explicitState=\"$:/state/tab--2112689675\"/>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/KeyboardShortcuts": {
            "title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n<small>{{$:/core/images/close-button}}</small>\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ControlPanel/LoadedModules": {
            "title": "$:/core/ui/ControlPanel/LoadedModules",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
        },
        "$:/core/ui/ControlPanel/Modals/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
            "subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
            "text": "\\define install-plugin-actions()\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$set name=\"url\" value={{!!url}}>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url=<<url>> title=<<dependency>>/>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define install-plugin-button()\n<div>\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$set name=\"reinstall-type\" value={{{ [<libraryVersion>compare:version:eq<installedVersion>then[tc-reinstall]] [<libraryVersion>compare:version:gt<installedVersion>then[tc-reinstall-upgrade]] [<libraryVersion>compare:version:lt<installedVersion>then[tc-reinstall-downgrade]] }}}>\n<$button actions=<<install-plugin-actions>> class={{{ [<assetInfo>get[original-title]has[version]then<reinstall-type>] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>\n{{$:/core/images/download-button}}\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\">\n<$list filter=\"[<libraryVersion>compare:version:gt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[<libraryVersion>compare:version:lt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\">\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\n</$list>\n\"\"\">\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\n</$list>\n</$list>\n</$button>\n<div>\n</div>\n<$reveal stateTitle=<<assetInfo>> stateField=\"requires-reload\" type=\"match\" text=\"yes\">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>\n</$set>\n</$set>\n</$set>\n</div>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1><strong><$text text={{{ [<assetInfo>get[name]] ~[<assetInfo>get[original-title]split[/]last[1]] }}}/></strong>: <$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-buttons\">\n<<install-plugin-button>>\n</div>\n</div>\n<$set name=\"original-title\" value={{{ [<assetInfo>get[original-title]] }}}>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]] ~[<assetInfo>get[original-title]!is[tiddler]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]!is[tiddler]]\">\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\n</$list>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]\" variable=\"ignore\">\n<div>\n{{$:/language/ControlPanel/Plugins/AlsoRequires}}\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[name]]\" variable=\"dependency\">\n<$text text=<<dependency>>/>\n</$list>\n</div>\n</$list>\n</$set>\n</div>\n</$list>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-sub-plugins\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[name]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n</$list>\n</div>\n</$reveal>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<$reveal type=\"nomatch\" text=\"yes\" state=<<popup-state>> tag=\"div\" class=\"tc-plugin-info-sub-plugin-indicator\">\n<$wikify name=\"count\" text=\"\"\"<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>]\"/>\"\"\">\n<$button class=\"tc-btn-invisible\" set=<<popup-state>> setTo=\"yes\">\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\n</$button>\n</$wikify>\n</$reveal>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$list filter=\"[<currentTiddler>get[enabled]else[yes]match[yes]]\" variable=\"ignore\">\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n</$list>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[name]]\" variable=\"assetInfo\">\n<$list filter=\"[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]\" variable=\"ignore\"><!-- Hide sub-plugins if we're not searching -->\n<<display-plugin-info \"$type$\">>\n</$list>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<$set name=\"transclusion\" value=<<connectionTiddler>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Updates]] [[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$set>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<div class=\"tc-tab-set\">\n<$set name=\"defaultTab\" value={{{ [all[tiddlers+shadows]tag[$:/tags/PluginLibrary]] }}}>\n<div class=\"tc-tab-buttons\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$button set=<<qualify \"$:/state/addplugins/tab\">> setTo=<<currentTiddler>> default=<<defaultTab>> selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\"/>\n</$set>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$reveal type=\"match\" state=<<qualify \"$:/state/addplugins/tab\">> text=<<currentTiddler>> default=<<defaultTab>>>\n<h2><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link></h2>\n//<$view field=\"url\"/>//\n<$transclude mode=\"block\"/>\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n<<display-server-connection>>\n</$reveal>\n</$list>\n</div>\n</$set>\n</div>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Palette": {
            "title": "$:/core/ui/ControlPanel/Palette",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Palette/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
        },
        "$:/core/ui/ControlPanel/Parsing": {
            "title": "$:/core/ui/ControlPanel/Parsing",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
            "text": "<<display-server-assets language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
            "text": "<<display-server-assets plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}  (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
            "text": "<<display-server-assets theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Add/Updates": {
            "title": "$:/core/ui/ControlPanel/Plugins/Add/Updates",
            "caption": "<$importvariables filter=\"$:/core/ui/ControlPanel/Plugins/Add/Updates\">{{$:/language/ControlPanel/Plugins/Updates/Caption}} (<<update-count>>)</$importvariables>",
            "text": "\\define each-updateable-plugin(body)\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}sort[title]]\" variable=\"assetInfo\">\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$list filter=\"[<assetInfo>get[original-title]has[version]!version<libraryVersion>]\" variable=\"ignore\">\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$list filter=\"[<installedversion>!match<libraryVersion>]\" variable=\"ignore\">\n$body$\n</$list>\n</$set>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define update-all-actions()\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<<install-plugin-actions>>\n\"\"\"/>\n\\end\n\n\\define update-count()\n<$wikify name=\"count-filter\" text=<<each-updateable-plugin \"&#91;&#91;<$text text=<<assetInfo>>/>]]\">>><$count filter=<<count-filter>>/></$wikify>\n\\end\n\n<$button actions=<<update-all-actions>> class=\"tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\">\n{{$:/core/images/download-button}} {{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\n</$button>\n\n<div class=\"tc-plugin-library-listing\">\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<$macrocall $name=\"display-plugin-info\" type={{{ [<assetInfo>get[original-plugin-type]] }}}/>\n\"\"\"/>\n</div>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/AddPlugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
            "text": "<<plugin-table language>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
            "text": "<<plugin-table plugin>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
            "title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
            "text": "<<plugin-table theme>>\n"
        },
        "$:/core/ui/ControlPanel/Plugins": {
            "title": "$:/core/ui/ControlPanel/Plugins",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[name]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<$macrocall $name=\"tabs\" tabsList=\"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" default=\"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\" explicitState=\"$:/state/tab--86143343\"/>\n"
        },
        "$:/core/ui/ControlPanel/Saving/DownloadSaver": {
            "title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Saving/General": {
            "title": "$:/core/ui/ControlPanel/Saving/General",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
            "list-before": "",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Saving/GitHub": {
            "title": "$:/core/ui/ControlPanel/Saving/GitHub",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
        },
        "$:/core/ui/ControlPanel/Saving/GitLab": {
            "title": "$:/core/ui/ControlPanel/Saving/GitLab",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
        },
        "$:/core/ui/ControlPanel/Saving/TiddlySpot": {
            "title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define siteURL(path)\nhttp://$(userName)$.tiddlyspot.com/$path$/\n\\end\n\\define siteLink(path)\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<siteURL $path$>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<div class=\"tc-message-box\">\n\n<<lingo ReadOnly>>\n\n</div>\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<siteLink backup>> |\n|<<lingo ControlPanel>> |<<siteLink controlpanel>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>>  |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>\n"
        },
        "$:/core/ui/ControlPanel/Saving/Gitea": {
            "title": "$:/core/ui/ControlPanel/Saving/Gitea",
            "tags": "$:/tags/ControlPanel/Saving",
            "caption": "{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~Gitea\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/Gitea/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo Gitea/Password>> |<$password name=\"Gitea\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/Gitea/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/Gitea/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/Gitea/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/Gitea/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/Gitea/ServerURL\" default=\"https://gitea/api/v1\" tag=\"input\"/> |\n"
        },
        "$:/core/ui/ControlPanel/Saving": {
            "title": "$:/core/ui/ControlPanel/Saving",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Saving/Caption}}",
            "text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Saving/General\" explicitState=\"$:/state/tab-2065006209\"/>\n</div>\n"
        },
        "$:/core/buttonstyles/Borderless": {
            "title": "$:/core/buttonstyles/Borderless",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
            "text": "tc-btn-invisible"
        },
        "$:/core/buttonstyles/Boxed": {
            "title": "$:/core/buttonstyles/Boxed",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
            "text": "tc-btn-boxed"
        },
        "$:/core/buttonstyles/Rounded": {
            "title": "$:/core/buttonstyles/Rounded",
            "tags": "$:/tags/ToolbarButtonStyle",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
            "text": "tc-btn-rounded"
        },
        "$:/core/ui/ControlPanel/Settings/CamelCase": {
            "title": "$:/core/ui/ControlPanel/Settings/CamelCase",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
            "title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
            "caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
            "title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
            "caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
            "tags": "$:/tags/ControlPanel/Settings",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
            "title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
            "title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n  <option value=\"above\"><<lingo \"OpenAbove\">></option>\n  <option value=\"below\"><<lingo \"OpenBelow\">></option>\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n  <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n  <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/MissingLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationHistory": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
            "title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
            "title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings/TitleLinks": {
            "title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
        },
        "$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
            "title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
            "tags": "$:/tags/ControlPanel/Settings",
            "caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
        },
        "$:/core/ui/ControlPanel/Settings": {
            "title": "$:/core/ui/ControlPanel/Settings",
            "tags": "$:/tags/ControlPanel",
            "caption": "{{$:/language/ControlPanel/Settings/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ControlPanel/StoryView": {
            "title": "$:/core/ui/ControlPanel/StoryView",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
            "text": "{{$:/snippets/viewswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/Stylesheets": {
            "title": "$:/core/ui/ControlPanel/Stylesheets",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
        },
        "$:/core/ui/ControlPanel/Theme": {
            "title": "$:/core/ui/ControlPanel/Theme",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Theme/Caption}}",
            "text": "{{$:/snippets/themeswitcher}}\n"
        },
        "$:/core/ui/ControlPanel/TiddlerFields": {
            "title": "$:/core/ui/ControlPanel/TiddlerFields",
            "tags": "$:/tags/ControlPanel/Advanced",
            "caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
            "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
            "text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/PageControls": {
            "title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
            "title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
            "tags": "$:/tags/ControlPanel/Toolbars",
            "caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/ControlPanel/Toolbars": {
            "title": "$:/core/ui/ControlPanel/Toolbars",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
            "text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" class=\"tc-vertical\" explicitState=\"$:/state/tabs/controlpanel/toolbars-1345989671\"/>\n</div>\n"
        },
        "$:/ControlPanel": {
            "title": "$:/ControlPanel",
            "icon": "$:/core/images/options-button",
            "color": "#bbb",
            "text": "<div class=\"tc-control-panel\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" default=\"$:/core/ui/ControlPanel/Info\" explicitState=\"$:/state/tab-1749438307\"/>\n</div>\n"
        },
        "$:/core/ui/DefaultSearchResultList": {
            "title": "$:/core/ui/DefaultSearchResultList",
            "tags": "$:/tags/SearchResults",
            "caption": "{{$:/language/Search/DefaultResults/Caption}}",
            "first-search-filter": "[!is[system]search:title<userInput>sort[title]limit[250]]",
            "second-search-filter": "[!is[system]search<userInput>sort[title]limit[250]]",
            "text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[first-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-primaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[<userInput>minlength[1]]\" variable=\"ignore\">\n<$list filter={{{ [<configTiddler>get[second-search-filter]] }}}>\n<span class={{{[<currentTiddler>addsuffix[-secondaryList]] -[<searchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</span>\n</$list>\n</$list>\n\n\\end\n<<searchResultList>>\n"
        },
        "$:/core/ui/EditTemplate/body/preview/diffs-current": {
            "title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
            "tags": "$:/tags/EditPreview",
            "caption": "differences from current",
            "list-after": "$:/core/ui/EditTemplate/body/preview/output",
            "text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
        },
        "$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
            "title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
            "tags": "$:/tags/EditPreview",
            "caption": "differences from shadow (if any)",
            "list-after": "$:/core/ui/EditTemplate/body/preview/output",
            "text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
        },
        "$:/core/ui/EditTemplate/body/preview/output": {
            "title": "$:/core/ui/EditTemplate/body/preview/output",
            "tags": "$:/tags/EditPreview",
            "caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
            "text": "\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
        },
        "$:/state/showeditpreview": {
            "title": "$:/state/showeditpreview",
            "text": "no"
        },
        "$:/core/ui/EditTemplate/body/editor": {
            "title": "$:/core/ui/EditTemplate/body/editor",
            "text": "<$edit\n\n  field=\"text\"\n  class=\"tc-edit-texteditor tc-edit-texteditor-body\"\n  placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n  tabindex={{$:/config/EditTabIndex}}\n  focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}\n  cancelPopups=\"yes\"\n\n><$set\n\n  name=\"targetTiddler\"\n  value=<<currentTiddler>>\n\n><$list\n\n  filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n  type=\"nomatch\"\n  state=<<config-visibility-title>>\n  text=\"hide\"\n  class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n  tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n  mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
        },
        "$:/core/ui/EditTemplate/body/toolbar/button": {
            "title": "$:/core/ui/EditTemplate/body/toolbar/button",
            "text": "\\define toolbar-button-icon()\n<$list\n\n  filter=\"[all[current]!has[custom-icon]]\"\n  variable=\"no-custom-icon\"\n\n><$transclude\n\n  tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n  filter={{!!condition}}\n  variable=\"list-condition\"\n\n><$wikify\n\n  name=\"tooltip-text\"\n  text=<<toolbar-button-tooltip>>\n  mode=\"inline\"\n  output=\"text\"\n\n><$list\n\n  filter=\"[all[current]!has[dropdown]]\"\n  variable=\"no-dropdown\"\n\n><$button\n\n  class=\"tc-btn-invisible $(buttonClasses)$\"\n  tooltip=<<tooltip-text>>\n  actions={{!!actions}}\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button></$list><$list\n\n  filter=\"[all[current]has[dropdown]]\"\n  variable=\"dropdown\"\n\n><$set\n\n  name=\"dropdown-state\"\n  value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n  popup=<<dropdown-state>>\n  class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n  selectedClass=\"tc-selected\"\n  tooltip=<<tooltip-text>>\n  actions={{!!actions}}\n\n><span\n\n  data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n  tiddler=<<currentTiddler>>\n  field=\"text\"\n\n/></$button><$reveal\n\n  state=<<dropdown-state>>\n  type=\"popup\"\n  position=\"below\"\n  animate=\"yes\"\n  tag=\"span\"\n\n><div\n\n  class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n  tiddler={{!!dropdown}}\n  mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n  name=\"buttonClasses\"\n  value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
        },
        "$:/core/ui/EditTemplate/body": {
            "title": "$:/core/ui/EditTemplate/body",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/EditTemplate/controls": {
            "title": "$:/core/ui/EditTemplate/controls",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
        },
        "$:/core/ui/EditTemplate/fields": {
            "title": "$:/core/ui/EditTemplate/fields",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name-wrapper input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define delete-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\n\\define cancel-search-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newFieldNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-state-tiddlers>>\n</$list>\n\\end\n\n\\define cancel-search-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newFieldNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newFieldNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]\"/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class={{{ [all[current]fields[]] :filter[lookup[$:/config/EditTemplateFields/Visibility/]!match[hide]] +[count[]!match[0]] +[then[tc-edit-fields]] ~[[tc-edit-fields tc-edit-fields-small]] }}}>\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$keyboard key=\"((delete-field))\" actions=\"\"\"<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\"\"\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/><$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/></$set>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit tc-big-gap-right\">\n<<lingo Fields/Add/Prompt>>\n</em>\n<$vars refreshTitle=<<qualify \"$:/temp/fieldname/refresh\">> storeTitle=<<newFieldNameInputTiddler>> searchListState=<<newFieldNameSelectionTiddler>>>\n<div class=\"tc-edit-field-add-name-wrapper\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newFieldNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<searchListState>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}}\n\t\tfocus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}} cancelPopups=\"yes\"\n\t\tconfigTiddlerFilter=\"[[$:/config/EditMode/fieldname-filter]]\" inputCancelActions=<<cancel-search-actions>> />\n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\"  variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-primaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$list filter=\"[<currentField>addsuffix[-secondaryList]] -[<searchListState>get[text]]\" emptyMessage=\"\"\"<$link to=<<currentField>> class=\"tc-list-item-selected\"><$text text=<<currentField>>/></$link>\"\"\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n</div>\n<span class=\"tc-edit-field-add-value tc-small-gap-right\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n</$keyboard>\n</$set>\n</span>\n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</$vars>\n</div>\n</$fieldmangler>\n"
        },
        "$:/core/ui/EditTemplate/shadow": {
            "title": "$:/core/ui/EditTemplate/shadow",
            "tags": "$:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
        },
        "$:/core/ui/EditTemplate/tags": {
            "title": "$:/core/ui/EditTemplate/tags",
            "tags": "$:/tags/EditTemplate",
            "text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon,tagField:\"tags\")\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view field=\"title\" format=\"text\" />\n<$button class=\"tc-btn-invisible tc-remove-tag-button\"><$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[{!!title}]\"/>{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon,tagField:\"tags\")\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\" tagField=<<__tagField__>>/>\n\\end\n\n\\define edit-tags-template(tagField:\"tags\")\n\\whitespace trim\n<div class=\"tc-edit-tags\">\n<$list filter=\"[list[!!$tagField$]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}} tagField=<<__tagField__>>/>\n</$list>\n<$vars tabIndex={{$:/config/EditTabIndex}} cancelPopups=\"yes\">\n<$macrocall $name=\"tag-picker\" tagField=<<__tagField__>>/>\n</$vars>\n</div>\n\\end\n<$set name=\"saveTiddler\" value=<<currentTiddler>>>\n<$macrocall $name=\"edit-tags-template\" tagField=<<tagField>>/>\n</$set>\n"
        },
        "$:/core/ui/EditTemplate/title": {
            "title": "$:/core/ui/EditTemplate/title",
            "tags": "$:/tags/EditTemplate",
            "text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}} cancelPopups=\"yes\"/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/EditTemplate/type": {
            "title": "$:/core/ui/EditTemplate/type",
            "tags": "$:/tags/EditTemplate",
            "first-search-filter": "[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]sort[description]sort[group-sort]removeprefix[$:/language/Docs/Types/]search<userInput>]",
            "text": "\\define lingo-base() $:/language/EditTemplate/\n\\define input-cancel-actions() <$list filter=\"[<storeTitle>get[text]] [<currentTiddler>get[type]] +[limit[1]]\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\"><$action-sendmessage $message=\"tm-remove-field\" $param=\"type\"/><$action-deletetiddler $filter=\"[<typeInputTiddler>] [<refreshTitle>] [<typeSelectionTiddler>]\"/></$list>\n\\whitespace trim\n<$set name=\"refreshTitle\" value=<<qualify \"$:/temp/type-search/refresh\">>>\n<div class=\"tc-edit-type-selector-wrapper\">\n<em class=\"tc-edit tc-big-gap-right\"><<lingo Type/Prompt>></em>\n<div class=\"tc-type-selector-dropdown-wrapper\">\n<div class=\"tc-type-selector\"><$fieldmangler>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<currentTiddler>> storeTitle=<<typeInputTiddler>> refreshTitle=<<refreshTitle>> selectionStateTitle=<<typeSelectionTiddler>> field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}} cancelPopups=\"yes\" configTiddlerFilter=\"[[$:/core/ui/EditTemplate/type]]\" inputCancelActions=<<input-cancel-actions>>/><$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown tc-small-gap\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}<$action-deletetiddler $filter=\"[<storeTitle>] [<refreshTitle>] [<selectionStateTitle>]\"/></$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$set name=\"userInput\" value={{{ [<typeInputTiddler>get[text]] }}}>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]] +[removeprefix[$:/language/Docs/Types/]] +[search<userInput>]\"><span class={{{ [<currentTiddler>addsuffix[-primaryList]] -[<typeSelectionTiddler>get[text]] +[then[]else[tc-list-item-selected]] }}}><$link to={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]get[name]] }}}><$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"description\"/> (<$view tiddler={{{ [<currentTiddler>addprefix[$:/language/Docs/Types/]] }}} field=\"name\"/>)</$link></span>\n</$list>\n</$set>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n</div>\n</div>\n</$set>\n"
        },
        "$:/core/ui/EditTemplate": {
            "title": "$:/core/ui/EditTemplate",
            "text": "\\define delete-edittemplate-state-tiddlers() <$action-deletetiddler $filter=\"[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<newFieldNameInputTiddler>] [<newFieldNameSelectionTiddler>] [<newTagNameTiddler>] [<newTagNameInputTiddler>] [<newTagNameSelectionTiddler>] [<typeInputTiddler>] [<typeSelectionTiddler>]\"/>\n\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n\\define cancel-delete-tiddler-actions(message)\n<<delete-edittemplate-state-tiddlers>>\n<$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">> newFieldNameInputTiddler=<<qualify \"$:/temp/NewFieldName/input\">> newFieldNameSelectionTiddler=<<qualify \"$:/temp/NewFieldName/selected-item\">> newTagNameInputTiddler=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddler=<<qualify \"$:/temp/NewTagName/selected-item\">> typeInputTiddler=<<qualify \"$:/temp/Type/input\">> typeSelectionTiddler=<<qualify \"$:/temp/Type/selected-item\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" actions=<<cancel-delete-tiddler-actions \"cancel\">>>\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>\n"
        },
        "$:/core/ui/Buttons/cancel": {
            "title": "$:/core/ui/Buttons/cancel",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
            "description": "{{$:/language/Buttons/Cancel/Hint}}",
            "text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"cancel\">> tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/delete": {
            "title": "$:/core/ui/Buttons/delete",
            "tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
            "caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
            "description": "{{$:/language/Buttons/Delete/Hint}}",
            "text": "\\whitespace trim\n<$button actions=<<cancel-delete-tiddler-actions \"delete\">> tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/save": {
            "title": "$:/core/ui/Buttons/save",
            "tags": "$:/tags/EditToolbar",
            "caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
            "description": "{{$:/language/Buttons/Save/Hint}}",
            "text": "\\define save-tiddler-button()\n\\whitespace trim\n<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<<save-tiddler-actions>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n\\end\n<<save-tiddler-button>>\n"
        },
        "$:/core/ui/EditorToolbar/bold": {
            "title": "$:/core/ui/EditorToolbar/bold",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/bold",
            "caption": "{{$:/language/Buttons/Bold/Caption}}",
            "description": "{{$:/language/Buttons/Bold/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((bold))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/clear-dropdown": {
            "title": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/clear": {
            "title": "$:/core/ui/EditorToolbar/clear",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/erase",
            "caption": "{{$:/language/Buttons/Clear/Caption}}",
            "description": "{{$:/language/Buttons/Clear/Hint}}",
            "condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
            "dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/editor-height-dropdown": {
            "title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
        },
        "$:/core/ui/EditorToolbar/editor-height": {
            "title": "$:/core/ui/EditorToolbar/editor-height",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/fixed-height",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
            "description": "{{$:/language/Buttons/EditorHeight/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
            "dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
            "text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/excise-dropdown": {
            "title": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/excise": {
            "title": "$:/core/ui/EditorToolbar/excise",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/excise",
            "caption": "{{$:/language/Buttons/Excise/Caption}}",
            "description": "{{$:/language/Buttons/Excise/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
            "shortcuts": "((excise))",
            "dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/heading-1": {
            "title": "$:/core/ui/EditorToolbar/heading-1",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-1",
            "caption": "{{$:/language/Buttons/Heading1/Caption}}",
            "description": "{{$:/language/Buttons/Heading1/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((heading-1))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-2": {
            "title": "$:/core/ui/EditorToolbar/heading-2",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-2",
            "caption": "{{$:/language/Buttons/Heading2/Caption}}",
            "description": "{{$:/language/Buttons/Heading2/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-2))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-3": {
            "title": "$:/core/ui/EditorToolbar/heading-3",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-3",
            "caption": "{{$:/language/Buttons/Heading3/Caption}}",
            "description": "{{$:/language/Buttons/Heading3/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-3))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/core/ui/EditorToolbar/heading-4",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-4",
            "caption": "{{$:/language/Buttons/Heading4/Caption}}",
            "description": "{{$:/language/Buttons/Heading4/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-4))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/core/ui/EditorToolbar/heading-5",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-5",
            "caption": "{{$:/language/Buttons/Heading5/Caption}}",
            "description": "{{$:/language/Buttons/Heading5/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-5))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/core/ui/EditorToolbar/heading-6",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/heading-6",
            "caption": "{{$:/language/Buttons/Heading6/Caption}}",
            "description": "{{$:/language/Buttons/Heading6/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((heading-6))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/italic": {
            "title": "$:/core/ui/EditorToolbar/italic",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/italic",
            "caption": "{{$:/language/Buttons/Italic/Caption}}",
            "description": "{{$:/language/Buttons/Italic/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((italic))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/line-width-dropdown": {
            "title": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/line-width": {
            "title": "$:/core/ui/EditorToolbar/line-width",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/line-width",
            "caption": "{{$:/language/Buttons/LineWidth/Caption}}",
            "description": "{{$:/language/Buttons/LineWidth/Hint}}",
            "condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
            "dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>\n"
        },
        "$:/core/ui/EditorToolbar/link-dropdown": {
            "title": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $filter=\"[<dropdown-state>] [<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\n\\end\n\n\\define get-focus-selector() [data-tiddler-title=\"$(cssEscapedTitle)$\"] .tc-create-wikitext-link input\n\n\\define cancel-search-actions-inner()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}><$list filter=\"[<searchTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[<searchTiddler>] [<linkTiddler>] [<storeTitle>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=<<searchTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/></$list></$set>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<storeTitle>!has[text]] +[<searchTiddler>!has[text]]\" emptyMessage=\"\"\"<<cancel-search-actions-inner>>\"\"\"><$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"wrap-selection\" prefix=\"\" suffix=\"\"/></$list>\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" searchListState=<<qualify \"$:/temp/link-search/selected-item\">> refreshTitle=<<qualify \"$:/temp/link-search/refresh\">> storeTitle=<<qualify \"$:/temp/link-search/input\">>>\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">> class=\"tc-create-wikitext-link\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<searchTiddler>> storeTitle=<<storeTitle>>\n\t\tselectionStateTitle=<<searchListState>> refreshTitle=<<refreshTitle>> type=\"search\" filterMinLength=\"1\"\n\t\ttag=\"input\" focus=\"true\" class=\"tc-popup-handle\" inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<add-link-actions>> placeholder={{$:/language/Search/Search}} default=\"\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\" />\n</$keyboard>\n</$keyboard>\n<$reveal tag=\"span\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<<cancel-search-actions>><$set name=\"cssEscapedTitle\" value={{{ [<storyTiddler>escapecss[]] }}}><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-focus-selector>>/></$set>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$vars>\n\n<$reveal tag=\"div\" state=<<storeTitle>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n<$vars userInput={{{ [<storeTitle>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n\n{{$:/core/ui/SearchResults}}\n\n</$vars>\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/link": {
            "title": "$:/core/ui/EditorToolbar/link",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/link",
            "caption": "{{$:/language/Buttons/Link/Caption}}",
            "description": "{{$:/language/Buttons/Link/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((link))",
            "dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/linkify": {
            "title": "$:/core/ui/EditorToolbar/linkify",
            "caption": "{{$:/language/Buttons/Linkify/Caption}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Buttons/Linkify/Hint}}",
            "icon": "$:/core/images/linkify",
            "list-before": "$:/core/ui/EditorToolbar/mono-block",
            "shortcuts": "((linkify))",
            "tags": "$:/tags/EditorToolbar",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/list-bullet": {
            "title": "$:/core/ui/EditorToolbar/list-bullet",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-bullet",
            "caption": "{{$:/language/Buttons/ListBullet/Caption}}",
            "description": "{{$:/language/Buttons/ListBullet/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-bullet))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/list-number": {
            "title": "$:/core/ui/EditorToolbar/list-number",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/list-number",
            "caption": "{{$:/language/Buttons/ListNumber/Caption}}",
            "description": "{{$:/language/Buttons/ListNumber/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((list-number))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-block": {
            "title": "$:/core/ui/EditorToolbar/mono-block",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-block",
            "caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
            "description": "{{$:/language/Buttons/MonoBlock/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((mono-block))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/mono-line": {
            "title": "$:/core/ui/EditorToolbar/mono-line",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/mono-line",
            "caption": "{{$:/language/Buttons/MonoLine/Caption}}",
            "description": "{{$:/language/Buttons/MonoLine/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((mono-line))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/more-dropdown": {
            "title": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
        },
        "$:/core/ui/EditorToolbar/more": {
            "title": "$:/core/ui/EditorToolbar/more",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/down-arrow",
            "caption": "{{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "condition": "[<targetTiddler>]",
            "dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/opacity-dropdown": {
            "title": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/opacity": {
            "title": "$:/core/ui/EditorToolbar/opacity",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/opacity",
            "caption": "{{$:/language/Buttons/Opacity/Caption}}",
            "description": "{{$:/language/Buttons/Opacity/Hint}}",
            "condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
            "dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
            "text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
        },
        "$:/core/ui/EditorToolbar/paint-dropdown": {
            "title": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/paint": {
            "title": "$:/core/ui/EditorToolbar/paint",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/paint",
            "caption": "{{$:/language/Buttons/Paint/Caption}}",
            "description": "{{$:/language/Buttons/Paint/Hint}}",
            "condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
            "dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
            "text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
        },
        "$:/core/ui/EditorToolbar/picture-dropdown": {
            "title": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
        },
        "$:/core/ui/EditorToolbar/picture": {
            "title": "$:/core/ui/EditorToolbar/picture",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/picture",
            "caption": "{{$:/language/Buttons/Picture/Caption}}",
            "description": "{{$:/language/Buttons/Picture/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((picture))",
            "dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/preview-type-dropdown": {
            "title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
            "text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\"&nbsp;\"/>\n\n<$entity entity=\"&#x2713;\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
        },
        "$:/core/ui/EditorToolbar/preview-type": {
            "title": "$:/core/ui/EditorToolbar/preview-type",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/chevron-down",
            "caption": "{{$:/language/Buttons/PreviewType/Caption}}",
            "description": "{{$:/language/Buttons/PreviewType/Hint}}",
            "condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
            "button-classes": "tc-text-editor-toolbar-item-adjunct",
            "dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
        },
        "$:/core/ui/EditorToolbar/preview": {
            "title": "$:/core/ui/EditorToolbar/preview",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/preview-open",
            "custom-icon": "yes",
            "caption": "{{$:/language/Buttons/Preview/Caption}}",
            "description": "{{$:/language/Buttons/Preview/Hint}}",
            "condition": "[<targetTiddler>]",
            "button-classes": "tc-text-editor-toolbar-item-start-group",
            "shortcuts": "((preview))",
            "text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
        },
        "$:/core/ui/EditorToolbar/quote": {
            "title": "$:/core/ui/EditorToolbar/quote",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/quote",
            "caption": "{{$:/language/Buttons/Quote/Caption}}",
            "description": "{{$:/language/Buttons/Quote/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((quote))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/rotate-left": {
            "title": "$:/core/ui/EditorToolbar/rotate-left",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/rotate-left",
            "caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
            "description": "{{$:/language/Buttons/RotateLeft/Hint}}",
            "condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/size-dropdown": {
            "title": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> &times; <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
        },
        "$:/core/ui/EditorToolbar/size": {
            "title": "$:/core/ui/EditorToolbar/size",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/size",
            "caption": "{{$:/language/Buttons/Size/Caption}}",
            "description": "{{$:/language/Buttons/Size/Hint}}",
            "condition": "[<targetTiddler>is[image]] -[<targetTiddler>type[image/svg+xml]]",
            "dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/stamp-dropdown": {
            "title": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" />\n\n</$transclude>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
        },
        "$:/core/ui/EditorToolbar/stamp": {
            "title": "$:/core/ui/EditorToolbar/stamp",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/stamp",
            "caption": "{{$:/language/Buttons/Stamp/Caption}}",
            "description": "{{$:/language/Buttons/Stamp/Hint}}",
            "condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] [<targetTiddler>get[type]match[application/javascript]] [<targetTiddler>get[type]match[application/json]] [<targetTiddler>get[type]match[application/x-tiddler-dictionary]] [<targetTiddler>get[type]match[image/svg+xml]] +[first[]]",
            "shortcuts": "((stamp))",
            "dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
            "text": ""
        },
        "$:/core/ui/EditorToolbar/strikethrough": {
            "title": "$:/core/ui/EditorToolbar/strikethrough",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/strikethrough",
            "caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
            "description": "{{$:/language/Buttons/Strikethrough/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((strikethrough))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/subscript": {
            "title": "$:/core/ui/EditorToolbar/subscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/subscript",
            "caption": "{{$:/language/Buttons/Subscript/Caption}}",
            "description": "{{$:/language/Buttons/Subscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((subscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/superscript": {
            "title": "$:/core/ui/EditorToolbar/superscript",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/superscript",
            "caption": "{{$:/language/Buttons/Superscript/Caption}}",
            "description": "{{$:/language/Buttons/Superscript/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((superscript))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/transcludify": {
            "title": "$:/core/ui/EditorToolbar/transcludify",
            "caption": "{{$:/language/Buttons/Transcludify/Caption}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Buttons/Transcludify/Hint}}",
            "icon": "$:/core/images/transcludify",
            "list-before": "$:/core/ui/EditorToolbar/mono-block",
            "shortcuts": "((transcludify))",
            "tags": "$:/tags/EditorToolbar",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
        },
        "$:/core/ui/EditorToolbar/underline": {
            "title": "$:/core/ui/EditorToolbar/underline",
            "tags": "$:/tags/EditorToolbar",
            "icon": "$:/core/images/underline",
            "caption": "{{$:/language/Buttons/Underline/Caption}}",
            "description": "{{$:/language/Buttons/Underline/Hint}}",
            "condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
            "shortcuts": "((underline))",
            "text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
        },
        "$:/core/Filters/AllTags": {
            "title": "$:/core/Filters/AllTags",
            "tags": "$:/tags/Filter",
            "filter": "[tags[]!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTags}}",
            "text": ""
        },
        "$:/core/Filters/AllTiddlers": {
            "title": "$:/core/Filters/AllTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]sort[title]]",
            "description": "{{$:/language/Filters/AllTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/Drafts": {
            "title": "$:/core/Filters/Drafts",
            "tags": "$:/tags/Filter",
            "filter": "[has[draft.of]sort[title]]",
            "description": "{{$:/language/Filters/Drafts}}",
            "text": ""
        },
        "$:/core/Filters/Missing": {
            "title": "$:/core/Filters/Missing",
            "tags": "$:/tags/Filter",
            "filter": "[all[missing]sort[title]]",
            "description": "{{$:/language/Filters/Missing}}",
            "text": ""
        },
        "$:/core/Filters/Orphans": {
            "title": "$:/core/Filters/Orphans",
            "tags": "$:/tags/Filter",
            "filter": "[all[orphans]sort[title]]",
            "description": "{{$:/language/Filters/Orphans}}",
            "text": ""
        },
        "$:/core/Filters/OverriddenShadowTiddlers": {
            "title": "$:/core/Filters/OverriddenShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[shadow]]",
            "description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentSystemTiddlers": {
            "title": "$:/core/Filters/RecentSystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentSystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/RecentTiddlers": {
            "title": "$:/core/Filters/RecentTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
            "description": "{{$:/language/Filters/RecentTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/SessionTiddlers": {
            "title": "$:/core/Filters/SessionTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[haschanged[]]",
            "description": "{{$:/language/Filters/SessionTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/ShadowTiddlers": {
            "title": "$:/core/Filters/ShadowTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows]sort[title]]",
            "description": "{{$:/language/Filters/ShadowTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/StoryList": {
            "title": "$:/core/Filters/StoryList",
            "tags": "$:/tags/Filter",
            "filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
            "description": "{{$:/language/Filters/StoryList}}",
            "text": ""
        },
        "$:/core/Filters/SystemTags": {
            "title": "$:/core/Filters/SystemTags",
            "tags": "$:/tags/Filter",
            "filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTags}}",
            "text": ""
        },
        "$:/core/Filters/SystemTiddlers": {
            "title": "$:/core/Filters/SystemTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[is[system]sort[title]]",
            "description": "{{$:/language/Filters/SystemTiddlers}}",
            "text": ""
        },
        "$:/core/Filters/TypedTiddlers": {
            "title": "$:/core/Filters/TypedTiddlers",
            "tags": "$:/tags/Filter",
            "filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
            "description": "{{$:/language/Filters/TypedTiddlers}}",
            "text": ""
        },
        "$:/core/ui/ImportListing": {
            "title": "$:/core/ui/ImportListing",
            "text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField() message-$(payloadTiddler)$\n\n\\define payloadTitleFilter() [<currentTiddler>get<renameField>minlength[1]else<payloadTiddler>]\n\n\\define overWriteWarning()\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\">\n<$text text={{{[subfilter<payloadTitleFilter>!is[tiddler]then[]] ~[<lingo-base>addsuffix[Listing/Rename/OverwriteWarning]get[text]]}}}/>\n</$list>\n\\end\n\n\\define selectionField() selection-$(payloadTiddler)$\n\n\\define renameField() rename-$(payloadTiddler)$\n\n\\define suppressedField() suppressed-$(payloadTiddler)$\n\n\\define newImportTitleTiddler() $:/temp/NewImportTitle-$(payloadTiddler)$\n\n\\define previewPopupState() $(currentTiddler)$!!popup-$(payloadTiddler)$\n\n\\define renameFieldState() $(currentTiddler)$!!state-rename-$(payloadTiddler)$\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table class=\"tc-import-table\">\n<tbody>\n<tr>\n<th align=\"left\">\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr class={{{[<currentTiddler>has<suppressedField>then[tc-row-disabled]] ~[subfilter<payloadTitleFilter>is[tiddler]then[tc-row-warning]] }}}>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}/>\n</td>\n<td>\n<$reveal type=\"nomatch\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$reveal type=\"nomatch\" state=<<previewPopupState>> text=\"yes\" tag=\"div\" class=\"tc-flex\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown tc-flex-grow-1 tc-word-break\" set=<<previewPopupState>> setTo=\"yes\" disabled={{{[<currentTiddler>has<suppressedField>then[yes]else[no]]}}}>\n<span class=\"tc-small-gap-right\">{{$:/core/images/right-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n<$list filter=\"[<currentTiddler>!has<suppressedField>]\"><$button class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"yes\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/Tooltip]get[text]]}}}>{{$:/core/images/edit-button}}</$button></$list>\n</$reveal>\n<$reveal type=\"match\" state=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<previewPopupState>> setTo=\"no\">\n<span class=\"tc-small-gap-right\">{{$:/core/images/down-arrow}}</span><$text text={{{[subfilter<payloadTitleFilter>]}}}/>\n</$button>\n</$reveal>\n</$reveal>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"div\">\n<$text text={{{[<lingo-base>addsuffix[Listing/Rename/Prompt]get[text]]}}}/>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n<<overWriteWarning>>\n</td>\n</tr>\n<$reveal type=\"match\" state=<<renameFieldState>> text=\"yes\" tag=\"tr\">\n<td colspan=\"3\">\n<div class=\"tc-flex\">\n<$edit-text tiddler=<<newImportTitleTiddler>>  default={{{[subfilter<payloadTitleFilter>]}}} tag=\"input\" class=\"tc-import-rename tc-flex-grow-1\"/><span class=\"tc-small-gap-left\"><$button  class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/CancelRename]get[text]]}}}>{{$:/core/images/close-button}}<$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button><span class=\"tc-small-gap-right\"/></span><$button  class=\"tc-btn-invisible\" set=<<renameFieldState>> setTo=\"no\" tooltip={{{[<lingo-base>addsuffix[Listing/Rename/ConfirmRename]get[text]]}}}>{{$:/core/images/done-button}}<$action-setfield $field=<<renameField>> $value={{{[<newImportTitleTiddler>get[text]minlength[1]else<payloadTiddler>]}}} /><$action-deletetiddler $tiddler=<<newImportTitleTiddler>>/></$button>\n</div>\n</td>\n</$reveal>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" state=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ImportPreviews/Diff": {
            "title": "$:/core/ui/ImportPreviews/Diff",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Diff}}",
            "text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
        },
        "$:/core/ui/ImportPreviews/DiffFields": {
            "title": "$:/core/ui/ImportPreviews/DiffFields",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
            "text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
        },
        "$:/core/ui/ImportPreviews/Fields": {
            "title": "$:/core/ui/ImportPreviews/Fields",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Fields}}",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/ImportPreviews/Text": {
            "title": "$:/core/ui/ImportPreviews/Text",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/Text}}",
            "text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
        },
        "$:/core/ui/ImportPreviews/TextRaw": {
            "title": "$:/core/ui/ImportPreviews/TextRaw",
            "tags": "$:/tags/ImportPreview",
            "caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
            "text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
        },
        "$:/core/ui/KeyboardShortcuts/advanced-search": {
            "title": "$:/core/ui/KeyboardShortcuts/advanced-search",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((advanced-search))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/>\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/change-sidebar-layout": {
            "title": "$:/core/ui/KeyboardShortcuts/change-sidebar-layout",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((change-sidebar-layout))",
            "text": "<$list filter=\"[{$:/themes/tiddlywiki/vanilla/options/sidebarlayout}match[fixed-fluid]]\" \nemptyMessage=\"\"\"<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fixed-fluid\"/>\"\"\">\n<$action-setfield $tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" text=\"fluid-fixed\"/>\n</$list>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-image": {
            "title": "$:/core/ui/KeyboardShortcuts/new-image",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-image))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-journal": {
            "title": "$:/core/ui/KeyboardShortcuts/new-journal",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-journal))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/new-tiddler": {
            "title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((new-tiddler))",
            "text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
        },
        "$:/core/ui/KeyboardShortcuts/save-wiki": {
            "title": "$:/core/ui/KeyboardShortcuts/save-wiki",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((save-wiki))",
            "text": "<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n"
        },
        "$:/core/ui/KeyboardShortcuts/sidebar-search": {
            "title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((sidebar-search))",
            "text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
        },
        "$:/core/ui/KeyboardShortcuts/switcher": {
            "title": "$:/core/ui/KeyboardShortcuts/switcher",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((layout-switcher))",
            "text": "<$action-sendmessage $message=\"tm-show-switcher\" switch=\"layout\"/>"
        },
        "$:/core/ui/KeyboardShortcuts/toggle-sidebar": {
            "title": "$:/core/ui/KeyboardShortcuts/toggle-sidebar",
            "tags": "$:/tags/KeyboardShortcut",
            "key": "((toggle-sidebar))",
            "text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
        },
        "$:/snippets/LayoutSwitcher": {
            "title": "$:/snippets/LayoutSwitcher",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ControlPanel/LayoutSwitcher/Caption}}",
            "text": "<$linkcatcher to=\"$:/layout\">\n<div class=\"tc-chooser\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/Layout]] [[$:/core/ui/PageTemplate]] +[!is[draft]sort[name]]\">\n<$list filter=\"[{$:/layout}!has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/layout}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n\"\"\">\n<$set name=\"cls\" filter=\"[all[current]field:title[$:/core/ui/PageTemplate]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$transclude field=\"name\"/>'' - <$transclude field=\"description\"/></$link></div>\n</$set>\n</$list>\n</$list>\n</div>\n</$linkcatcher>\n"
        },
        "$:/core/ui/ListItemTemplate": {
            "title": "$:/core/ui/ListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link />\n</div>"
        },
        "$:/Manager/ItemMain/Fields": {
            "title": "$:/Manager/ItemMain/Fields",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/Fields}}",
            "text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/Manager/ItemMain/RawText": {
            "title": "$:/Manager/ItemMain/RawText",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/RawText}}",
            "text": "<pre><code><$view/></code></pre>\n"
        },
        "$:/Manager/ItemMain/WikifiedText": {
            "title": "$:/Manager/ItemMain/WikifiedText",
            "tags": "$:/tags/Manager/ItemMain",
            "caption": "{{$:/language/Manager/Item/WikifiedText}}",
            "text": "<$transclude mode=\"block\"/>\n"
        },
        "$:/Manager/ItemSidebar/Colour": {
            "title": "$:/Manager/ItemSidebar/Colour",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Colour}}",
            "text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Icon": {
            "title": "$:/Manager/ItemSidebar/Icon",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Icon}}",
            "text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Tags": {
            "title": "$:/Manager/ItemSidebar/Tags",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Tags}}",
            "text": "\\whitespace trim\n\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\" storyview=\"pop\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$fieldmangler>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</$fieldmangler>\n</p>\n"
        },
        "$:/Manager/ItemSidebar/Tools": {
            "title": "$:/Manager/ItemSidebar/Tools",
            "tags": "$:/tags/Manager/ItemSidebar",
            "caption": "{{$:/language/Manager/Item/Tools}}",
            "text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
        },
        "$:/Manager": {
            "title": "$:/Manager",
            "icon": "$:/core/images/list",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
        },
        "$:/core/ui/MissingTemplate": {
            "title": "$:/core/ui/MissingTemplate",
            "text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
        },
        "$:/core/ui/MoreSideBar/All": {
            "title": "$:/core/ui/MoreSideBar/All",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/All/Caption}}",
            "text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Drafts": {
            "title": "$:/core/ui/MoreSideBar/Drafts",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Drafts/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Explorer": {
            "title": "$:/core/ui/MoreSideBar/Explorer",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Explorer/Caption}}",
            "text": "<<tree \"$:/\">>\n"
        },
        "$:/core/ui/MoreSideBar/Missing": {
            "title": "$:/core/ui/MoreSideBar/Missing",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Missing/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Orphans": {
            "title": "$:/core/ui/MoreSideBar/Orphans",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Orphans/Caption}}",
            "text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins": {
            "title": "$:/core/ui/MoreSideBar/Plugins",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
            "text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" default=\"$:/core/ui/MoreSideBar/Plugins/Plugins\" explicitState=\"$:/state/tab-1163638994\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Recent": {
            "title": "$:/core/ui/MoreSideBar/Recent",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Shadows": {
            "title": "$:/core/ui/MoreSideBar/Shadows",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Shadows/Caption}}",
            "text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/System": {
            "title": "$:/core/ui/MoreSideBar/System",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/System/Caption}}",
            "text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/MoreSideBar/Tags": {
            "title": "$:/core/ui/MoreSideBar/Tags",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Tags/Caption}}",
            "text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
        },
        "$:/core/ui/MoreSideBar/Types": {
            "title": "$:/core/ui/MoreSideBar/Types",
            "tags": "$:/tags/MoreSideBar",
            "caption": "{{$:/language/SideBar/Types/Caption}}",
            "text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Languages": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Languages",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Plugins": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
        },
        "$:/core/ui/MoreSideBar/Plugins/Theme": {
            "title": "$:/core/ui/MoreSideBar/Plugins/Theme",
            "tags": "$:/tags/MoreSideBar/Plugins",
            "caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
            "text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
        },
        "$:/core/ui/Buttons/advanced-search": {
            "title": "$:/core/ui/Buttons/advanced-search",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
            "description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
            "text": "\\whitespace trim\n\\define advanced-search-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<advanced-search-button>>>\n<<advanced-search-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/close-all": {
            "title": "$:/core/ui/Buttons/close-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
            "description": "{{$:/language/Buttons/CloseAll/Hint}}",
            "text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/control-panel": {
            "title": "$:/core/ui/Buttons/control-panel",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
            "description": "{{$:/language/Buttons/ControlPanel/Hint}}",
            "text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/encryption": {
            "title": "$:/core/ui/Buttons/encryption",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
            "description": "{{$:/language/Buttons/Encryption/Hint}}",
            "text": "\\whitespace trim\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/export-page": {
            "title": "$:/core/ui/Buttons/export-page",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
            "description": "{{$:/language/Buttons/ExportPage/Hint}}",
            "text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
        },
        "$:/core/ui/Buttons/fold-all": {
            "title": "$:/core/ui/Buttons/fold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
            "description": "{{$:/language/Buttons/FoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/full-screen": {
            "title": "$:/core/ui/Buttons/full-screen",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
            "description": "{{$:/language/Buttons/FullScreen/Hint}}",
            "text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/home": {
            "title": "$:/core/ui/Buttons/home",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
            "description": "{{$:/language/Buttons/Home/Hint}}",
            "text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/import": {
            "title": "$:/core/ui/Buttons/import",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
            "description": "{{$:/language/Buttons/Import/Hint}}",
            "text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
        },
        "$:/core/ui/Buttons/language": {
            "title": "$:/core/ui/Buttons/language",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
            "description": "{{$:/language/Buttons/Language/Hint}}",
            "text": "\\whitespace trim\n\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/manager": {
            "title": "$:/core/ui/Buttons/manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
            "description": "{{$:/language/Buttons/Manager/Hint}}",
            "text": "\\whitespace trim\n\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/core/ui/Buttons/more-page-actions",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-image": {
            "title": "$:/core/ui/Buttons/new-image",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
            "description": "{{$:/language/Buttons/NewImage/Hint}}",
            "text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/new-journal": {
            "title": "$:/core/ui/Buttons/new-journal",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
            "description": "{{$:/language/Buttons/NewJournal/Hint}}",
            "text": "\\whitespace trim\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
        },
        "$:/core/ui/Buttons/new-tiddler": {
            "title": "$:/core/ui/Buttons/new-tiddler",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
            "description": "{{$:/language/Buttons/NewTiddler/Hint}}",
            "text": "\\whitespace trim\n<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>\n"
        },
        "$:/core/ui/Buttons/palette": {
            "title": "$:/core/ui/Buttons/palette",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
            "description": "{{$:/language/Buttons/Palette/Hint}}",
            "text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/print": {
            "title": "$:/core/ui/Buttons/print",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
            "description": "{{$:/language/Buttons/Print/Hint}}",
            "text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/refresh": {
            "title": "$:/core/ui/Buttons/refresh",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
            "description": "{{$:/language/Buttons/Refresh/Hint}}",
            "text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/save-wiki": {
            "title": "$:/core/ui/Buttons/save-wiki",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
            "description": "{{$:/language/Buttons/SaveWiki/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
        },
        "$:/core/ui/Buttons/storyview": {
            "title": "$:/core/ui/Buttons/storyview",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
            "description": "{{$:/language/Buttons/StoryView/Hint}}",
            "text": "\\whitespace trim\n\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/tag-manager": {
            "title": "$:/core/ui/Buttons/tag-manager",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
            "description": "{{$:/language/Buttons/TagManager/Hint}}",
            "text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
        },
        "$:/core/ui/Buttons/theme": {
            "title": "$:/core/ui/Buttons/theme",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
            "description": "{{$:/language/Buttons/Theme/Hint}}",
            "text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/timestamp": {
            "title": "$:/core/ui/Buttons/timestamp",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
            "description": "{{$:/language/Buttons/Timestamp/Hint}}",
            "text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/unfold-all": {
            "title": "$:/core/ui/Buttons/unfold-all",
            "tags": "$:/tags/PageControls",
            "caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
            "description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
            "text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
        },
        "$:/core/ui/PageTemplate/pagecontrols": {
            "title": "$:/core/ui/PageTemplate/pagecontrols",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
        },
        "$:/core/ui/PageStylesheet": {
            "title": "$:/core/ui/PageStylesheet",
            "text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/PageTemplate/alerts": {
            "title": "$:/core/ui/PageTemplate/alerts",
            "tags": "$:/tags/PageTemplate",
            "text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
        },
        "$:/core/ui/PageTemplate/drafts": {
            "title": "$:/core/ui/PageTemplate/drafts",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
        },
        "$:/core/ui/PageTemplate/pluginreloadwarning": {
            "title": "$:/core/ui/PageTemplate/pluginreloadwarning",
            "tags": "$:/tags/PageTemplate",
            "text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[{$:/status/RequireReloadDueToPluginChange}match[yes]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
        },
        "$:/core/ui/PageTemplate/sidebar": {
            "title": "$:/core/ui/PageTemplate/sidebar",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"  tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
        },
        "$:/core/ui/PageTemplate/story": {
            "title": "$:/core/ui/PageTemplate/story",
            "tags": "$:/tags/PageTemplate",
            "text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
        },
        "$:/core/ui/PageTemplate/topleftbar": {
            "title": "$:/core/ui/PageTemplate/topleftbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate/toprightbar": {
            "title": "$:/core/ui/PageTemplate/toprightbar",
            "tags": "$:/tags/PageTemplate",
            "text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
        },
        "$:/core/ui/PageTemplate": {
            "title": "$:/core/ui/PageTemplate",
            "name": "{{$:/language/PageTemplate/Name}}",
            "description": "{{$:/language/PageTemplate/Description}}",
            "text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$vars\n\ttv-config-toolbar-icons={{$:/config/Toolbar/Icons}}\n\ttv-config-toolbar-text={{$:/config/Toolbar/Text}}\n\ttv-config-toolbar-class={{$:/config/Toolbar/ButtonClass}}\n\ttv-enable-drag-and-drop={{$:/config/DragAndDrop/Enable}}\n\ttv-show-missing-links={{$:/config/MissingLinks}}\n\tstoryviewTitle={{$:/view}}\n\tlanguageTitle={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone enable=<<tv-enable-drag-and-drop>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$vars>\n"
        },
        "$:/PaletteManager": {
            "title": "$:/PaletteManager",
            "text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}}<$text text=<<newColourName>> class=\"tc-small-gap-left\"/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip={{$:/language/ControlPanel/Palette/Editor/Delete/Hint}} aria-label=<<lingo Delete/Hint>> class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\"><span class=\"tc-small-gap-left\"><<lingo Names/External/Show>></span></$checkbox>\n\n<<palette-manager-table>>\n"
        },
        "$:/core/ui/PluginInfo": {
            "title": "$:/core/ui/PluginInfo",
            "text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
        },
        "$:/core/ui/PluginInfo/Default/contents": {
            "title": "$:/core/ui/PluginInfo/Default/contents",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link />\n</li>\n</$list>\n</ul>\n"
        },
        "$:/core/ui/PluginListItemTemplate": {
            "title": "$:/core/ui/PluginListItemTemplate",
            "text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}><$view field=\"description\"><$view field=\"title\"/></$view></$link>\n</div>"
        },
        "$:/core/ui/RootTemplate": {
            "title": "$:/core/ui/RootTemplate",
            "text": "<$transclude tiddler={{{ [{$:/layout}has[text]] ~[[$:/core/ui/PageTemplate]] }}} mode=\"inline\"/>\n\n"
        },
        "$:/core/ui/SearchResults": {
            "title": "$:/core/ui/SearchResults",
            "text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<currentTab>>/>\"\"\" explicitState=\"$:/state/tab/search-results/sidebar\"/>\n\n</$list>\n\n</div>\n"
        },
        "$:/core/ui/SideBar/More": {
            "title": "$:/core/ui/SideBar/More",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/More/Caption}}",
            "text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" explicitState=\"$:/state/tab/moresidebar-1850697562\"/>\n</div>\n"
        },
        "$:/core/ui/SideBar/Open": {
            "title": "$:/core/ui/SideBar/Open",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Open/Caption}}",
            "text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini tc-small-gap-right\">{{$:/core/images/close-button}}</$button><$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
        },
        "$:/core/ui/SideBar/Recent": {
            "title": "$:/core/ui/SideBar/Recent",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Recent/Caption}}",
            "text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
        },
        "$:/core/ui/SideBar/Tools": {
            "title": "$:/core/ui/SideBar/Tools",
            "tags": "$:/tags/SideBar",
            "caption": "{{$:/language/SideBar/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/SideBarLists": {
            "title": "$:/core/ui/SideBarLists",
            "text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
        },
        "$:/core/ui/SideBarSegments/page-controls": {
            "title": "$:/core/ui/SideBarSegments/page-controls",
            "tags": "$:/tags/SideBarSegment",
            "text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
        },
        "$:/core/ui/SideBarSegments/search": {
            "title": "$:/core/ui/SideBarSegments/search",
            "tags": "$:/tags/SideBarSegment",
            "text": "\\whitespace trim\n\n\\define count-popup-button()\n\\whitespace trim\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$(searchTiddler)$}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$vars userInput={{{ [<searchTiddler>get[text]] }}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}} replaceRegexp=\"limit\\[\\d+\\]\">\n<$vars primaryListFilter={{{ [<configTiddler>get[first-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}} secondaryListFilter={{{ [<configTiddler>get[second-search-filter]search-replace:g:regexp<replaceRegexp>,[]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[subfilter<primaryListFilter>] [subfilter<secondaryListFilter>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$vars>\n</$vars>\n</$list>\n</$button>\n\\end\n\n\\define search-results-list()\n\\whitespace trim\n<$vars userInput={{$(searchTiddler)$}} configTiddler={{{ [[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$tiddler tiddler=<<configTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$tiddler>\n\n</$list>\n</$vars>\n\\end\n\n\\define cancel-search-actions() <$list filter=\"[<searchTiddler>get[text]!match{$:/temp/search}]\" emptyMessage=\"\"\"<$action-deletetiddler $filter=\"[[$:/temp/search]] [<searchTiddler>] [<searchListState>]\"/>\"\"\"><$action-setfield $tiddler=\"$:/temp/search\" text={{{ [<searchTiddler>get[text]] }}}/><$action-setfield $tiddler=\"$:/temp/search/refresh\" text=\"yes\"/></$list>\n\n\\define input-accept-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\"\"\"><$action-navigate $to={{{ [<__tiddler__>get[text]] }}}/></$list>\n\n\\define input-accept-variant-actions() <$list filter=\"[{$:/config/Search/NavigateOnEnter/enable}match[yes]]\" emptyMessage=\"\"\"<$list filter=\"[<__tiddler__>get[text]!is[missing]] ~[<__tiddler__>get[text]is[shadow]]\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\"\"\"><$list filter=\"[<__tiddler__>get[text]minlength[1]]\"><$action-sendmessage $message=\"tm-edit-tiddler\" $param={{{  [<__tiddler__>get[text]] }}}/></$list></$list>\n\n\\define set-next-input-tab(beforeafter:\"after\") <$macrocall $name=\"change-input-tab\" stateTitle=\"$:/state/tab/search-results/sidebar\" tag=\"$:/tags/SearchResults\" beforeafter=\"$beforeafter$\" defaultState={{$:/config/SearchResults/Default}} actions=\"\"\"<$action-setfield $tiddler=\"$:/state/search/currentTab\" text=<<nextTab>>/>\"\"\"/>\n\n\\define advanced-search-actions() <$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search/input}}/><$action-setfield $tiddler=\"$:/temp/advancedsearch/input\" text={{$:/temp/search/input}}/><<delete-state-tiddlers>><$action-navigate $to=\"$:/AdvancedSearch\"/><$action-setfield $tiddler=\"$:/temp/advancedsearch/refresh\" text=\"yes\"/><$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\" preventScroll=\"true\"/><$action-deletetiddler $filter=\"$:/temp/search $:/temp/search/input $:/temp/search/refresh [<searchListState>]\"/>\n\n<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$vars editTiddler=\"$:/temp/search\" searchTiddler=\"$:/temp/search/input\" searchListState=<<qualify \"$:/state/search-list/selected-item\">>>\n<div class=\"tc-search\">\n<$keyboard key=\"((input-tab-right))\" actions=<<set-next-input-tab>>>\n<$keyboard key=\"((input-tab-left))\" actions=<<set-next-input-tab \"before\">>>\n<$keyboard key=\"((advanced-search-sidebar))\" actions=<<advanced-search-actions>>>\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<editTiddler>> storeTitle=<<searchTiddler>> \n\t\tselectionStateTitle=<<searchListState>> refreshTitle=\"$:/temp/search/refresh\" type=\"search\" \n\t\ttag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> \n\t\tclass=\"tc-popup-handle\" filterMinLength={{$:/config/Search/MinLength}} inputCancelActions=<<cancel-search-actions>> \n\t\tinputAcceptActions=<<input-accept-actions>> inputAcceptVariantActions=<<input-accept-variant-actions>> cancelPopups=\"yes\" \n\t\tconfigTiddlerFilter=\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\"/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n<$reveal state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<<advanced-search-actions>>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<<cancel-search-actions>><$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n{{$:/core/images/close-button}}\n</$button>\n<<count-popup-button>>\n</$reveal>\n<$reveal state=<<searchTiddler>> type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<<search-results-list>>\n\n</$reveal>\n\n</$reveal>\n\n</$vars>\n\n</div>\n"
        },
        "$:/core/ui/SideBarSegments/site-subtitle": {
            "title": "$:/core/ui/SideBarSegments/site-subtitle",
            "tags": "$:/tags/SideBarSegment",
            "text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
        },
        "$:/core/ui/SideBarSegments/site-title": {
            "title": "$:/core/ui/SideBarSegments/site-title",
            "tags": "$:/tags/SideBarSegment",
            "text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
        },
        "$:/core/ui/SideBarSegments/tabs": {
            "title": "$:/core/ui/SideBarSegments/tabs",
            "tags": "$:/tags/SideBarSegment",
            "text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\" explicitState=\"$:/state/tab/sidebar--595412856\"/>\n\n</div>\n"
        },
        "$:/core/ui/SwitcherModal": {
            "title": "$:/core/ui/SwitcherModal",
            "subtitle": "<$text text={{{[<switch>lookup[$:/language/Switcher/Subtitle/]]}}}/>",
            "class": "tc-modal-centered",
            "text": "<$tiddler tiddler={{{[<switch>lookup[$:/config/SwitcherTargets/]]}}}>\n\n\n<$transclude/>\n\n\n</$tiddler>"
        },
        "$:/TagManager": {
            "title": "$:/TagManager",
            "icon": "$:/core/images/tag-button",
            "color": "#bbb",
            "text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n<$link to=\"\"><<lingo Icons/None>></$link>\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n\\whitespace trim\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TagPickerTagTemplate": {
            "title": "$:/core/ui/TagPickerTagTemplate",
            "text": "\\whitespace trim\n<$button class=<<button-classes>> tag=\"a\" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\n<$list filter=\"[<saveTiddler>minlength[1]]\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<tagField>> $subfilter=\"[<tag>]\"/>\n</$list>\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>> preventScroll=\"true\"/>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$list filter=\"[<refreshTitle>minlength[1]]\">\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n<<actions>>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<$wikify name=\"foregroundColor\" text=\"\"\"<$macrocall $name=\"contrastcolour\" target={{!!color}} fallbackTarget=<<fallbackTarget>> colourA=<<colourA>> colourB=<<colourB>>/>\"\"\">\n<span class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n<$transclude tiddler={{!!icon}}/><$view field=\"title\" format=\"text\"/>\n</span>\n</$wikify>\n</$set>\n</$button>\n"
        },
        "$:/core/ui/TagTemplate": {
            "title": "$:/core/ui/TagTemplate",
            "text": "\\whitespace trim\n<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
        },
        "$:/core/ui/TiddlerFieldTemplate": {
            "title": "$:/core/ui/TiddlerFieldTemplate",
            "text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
        },
        "$:/core/ui/TiddlerFields": {
            "title": "$:/core/ui/TiddlerFields",
            "text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
            "title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
            "tags": "$:/tags/TiddlerInfo/Advanced",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo/Advanced": {
            "title": "$:/core/ui/TiddlerInfo/Advanced",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
            "text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n</$list>\n"
        },
        "$:/core/ui/TiddlerInfo/Fields": {
            "title": "$:/core/ui/TiddlerInfo/Fields",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
            "text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/List": {
            "title": "$:/core/ui/TiddlerInfo/List",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/List/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Listed": {
            "title": "$:/core/ui/TiddlerInfo/Listed",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/References": {
            "title": "$:/core/ui/TiddlerInfo/References",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/References/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
        },
        "$:/core/ui/TiddlerInfo/Tagging": {
            "title": "$:/core/ui/TiddlerInfo/Tagging",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
        },
        "$:/core/ui/TiddlerInfo/Tools": {
            "title": "$:/core/ui/TiddlerInfo/Tools",
            "tags": "$:/tags/TiddlerInfo",
            "caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
            "text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
        },
        "$:/core/ui/TiddlerInfo": {
            "title": "$:/core/ui/TiddlerInfo",
            "text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>\n"
        },
        "$:/core/ui/TopBar/menu": {
            "title": "$:/core/ui/TopBar/menu",
            "tags": "$:/tags/TopRightBar",
            "text": "<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]!match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible tc-hide-sidebar-btn\">{{$:/core/images/chevron-right}}</$button>\n</$list>\n<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible tc-show-sidebar-btn\">{{$:/core/images/chevron-left}}</$button>\n</$list>\n"
        },
        "$:/core/ui/UntaggedTemplate": {
            "title": "$:/core/ui/UntaggedTemplate",
            "text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/body": {
            "title": "$:/core/ui/ViewTemplate/body",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/classic": {
            "title": "$:/core/ui/ViewTemplate/classic",
            "tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
            "text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/import": {
            "title": "$:/core/ui/ViewTemplate/import",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
        },
        "$:/core/ui/ViewTemplate/plugin": {
            "title": "$:/core/ui/ViewTemplate/plugin",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" class=\"tc-tiddler-plugin-info\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n</$reveal>"
        },
        "$:/core/ui/ViewTemplate/subtitle": {
            "title": "$:/core/ui/ViewTemplate/subtitle",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}} />\n<$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/tags": {
            "title": "$:/core/ui/ViewTemplate/tags",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate/title": {
            "title": "$:/core/ui/ViewTemplate/title",
            "tags": "$:/tags/ViewTemplate",
            "text": "\\whitespace trim\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<$list filter=\"[all[current]has[icon]]~[[$:/config/DefaultTiddlerIcon]has[text]]\">\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}>\n<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>\n</$transclude>\n</span>\n</$list>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
        },
        "$:/core/ui/ViewTemplate/unfold": {
            "title": "$:/core/ui/ViewTemplate/unfold",
            "tags": "$:/tags/ViewTemplate",
            "text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
        },
        "$:/core/ui/ViewTemplate": {
            "title": "$:/core/ui/ViewTemplate",
            "text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n\\define cancel-delete-tiddler-actions(message) <$action-sendmessage $message=\"tm-$message$-tiddler\"/>\n\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
        },
        "$:/core/ui/Buttons/clone": {
            "title": "$:/core/ui/Buttons/clone",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
            "description": "{{$:/language/Buttons/Clone/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close-others": {
            "title": "$:/core/ui/Buttons/close-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
            "description": "{{$:/language/Buttons/CloseOthers/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/close": {
            "title": "$:/core/ui/Buttons/close",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
            "description": "{{$:/language/Buttons/Close/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/edit": {
            "title": "$:/core/ui/Buttons/edit",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
            "description": "{{$:/language/Buttons/Edit/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/core/ui/Buttons/export-tiddler",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
            "description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
            "text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
        },
        "$:/core/ui/Buttons/fold-bar": {
            "title": "$:/core/ui/Buttons/fold-bar",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
            "description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
            "text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
        },
        "$:/core/ui/Buttons/fold-others": {
            "title": "$:/core/ui/Buttons/fold-others",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
            "description": "{{$:/language/Buttons/FoldOthers/Hint}}",
            "text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/fold": {
            "title": "$:/core/ui/Buttons/fold",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
            "description": "{{$:/language/Buttons/Fold/Hint}}",
            "text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
        },
        "$:/core/ui/Buttons/info": {
            "title": "$:/core/ui/Buttons/info",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
            "description": "{{$:/language/Buttons/Info/Hint}}",
            "text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
        },
        "$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/core/ui/Buttons/more-tiddler-actions",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
            "description": "{{$:/language/Buttons/More/Hint}}",
            "text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
        },
        "$:/core/ui/Buttons/new-here": {
            "title": "$:/core/ui/Buttons/new-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
            "description": "{{$:/language/Buttons/NewHere/Hint}}",
            "text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>] [{$:/config/NewTiddler/Tags}]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>\n"
        },
        "$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/core/ui/Buttons/new-journal-here",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
            "description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
            "text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>\n"
        },
        "$:/core/ui/Buttons/open-window": {
            "title": "$:/core/ui/Buttons/open-window",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
            "description": "{{$:/language/Buttons/OpenWindow/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permalink": {
            "title": "$:/core/ui/Buttons/permalink",
            "tags": "$:/tags/ViewToolbar",
            "caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
            "description": "{{$:/language/Buttons/Permalink/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/core/ui/Buttons/permaview": {
            "title": "$:/core/ui/Buttons/permaview",
            "tags": "$:/tags/ViewToolbar $:/tags/PageControls",
            "caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
            "description": "{{$:/language/Buttons/Permaview/Hint}}",
            "text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
        },
        "$:/DefaultTiddlers": {
            "title": "$:/DefaultTiddlers",
            "text": "GettingStarted\n"
        },
        "$:/temp/advancedsearch": {
            "title": "$:/temp/advancedsearch",
            "text": ""
        },
        "$:/snippets/allfields": {
            "title": "$:/snippets/allfields",
            "text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
        },
        "$:/config/AnimationDuration": {
            "title": "$:/config/AnimationDuration",
            "text": "400"
        },
        "$:/config/AutoFocus": {
            "title": "$:/config/AutoFocus",
            "text": "title"
        },
        "$:/config/AutoSave": {
            "title": "$:/config/AutoSave",
            "text": "yes"
        },
        "$:/config/BitmapEditor/Colour": {
            "title": "$:/config/BitmapEditor/Colour",
            "text": "#444"
        },
        "$:/config/BitmapEditor/ImageSizes": {
            "title": "$:/config/BitmapEditor/ImageSizes",
            "text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
        },
        "$:/config/BitmapEditor/LineWidth": {
            "title": "$:/config/BitmapEditor/LineWidth",
            "text": "3px"
        },
        "$:/config/BitmapEditor/LineWidths": {
            "title": "$:/config/BitmapEditor/LineWidths",
            "text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
        },
        "$:/config/BitmapEditor/Opacities": {
            "title": "$:/config/BitmapEditor/Opacities",
            "text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
        },
        "$:/config/BitmapEditor/Opacity": {
            "title": "$:/config/BitmapEditor/Opacity",
            "text": "1.0"
        },
        "$:/config/DefaultMoreSidebarTab": {
            "title": "$:/config/DefaultMoreSidebarTab",
            "text": "$:/core/ui/MoreSideBar/Tags"
        },
        "$:/config/DefaultSidebarTab": {
            "title": "$:/config/DefaultSidebarTab",
            "text": "$:/core/ui/SideBar/Open"
        },
        "$:/config/DownloadSaver/AutoSave": {
            "title": "$:/config/DownloadSaver/AutoSave",
            "text": "no"
        },
        "$:/config/Drafts/TypingTimeout": {
            "title": "$:/config/Drafts/TypingTimeout",
            "text": "400"
        },
        "$:/config/EditMode/fieldname-filter": {
            "title": "$:/config/EditMode/fieldname-filter",
            "first-search-filter": "[!is[shadow]!is[system]fields[]search:title<userInput>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type",
            "second-search-filter": "[fields[]search:title<userInput>sort[]] -[!is[shadow]!is[system]fields[]]"
        },
        "$:/config/EditTabIndex": {
            "title": "$:/config/EditTabIndex",
            "text": "1\n"
        },
        "$:/config/EditTemplateFields/Visibility/title": {
            "title": "$:/config/EditTemplateFields/Visibility/title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/tags": {
            "title": "$:/config/EditTemplateFields/Visibility/tags",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/text": {
            "title": "$:/config/EditTemplateFields/Visibility/text",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/creator": {
            "title": "$:/config/EditTemplateFields/Visibility/creator",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/created": {
            "title": "$:/config/EditTemplateFields/Visibility/created",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modified": {
            "title": "$:/config/EditTemplateFields/Visibility/modified",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/modifier": {
            "title": "$:/config/EditTemplateFields/Visibility/modifier",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/type": {
            "title": "$:/config/EditTemplateFields/Visibility/type",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.title": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.title",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/draft.of": {
            "title": "$:/config/EditTemplateFields/Visibility/draft.of",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/revision": {
            "title": "$:/config/EditTemplateFields/Visibility/revision",
            "text": "hide"
        },
        "$:/config/EditTemplateFields/Visibility/bag": {
            "title": "$:/config/EditTemplateFields/Visibility/bag",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
            "text": "hide"
        },
        "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
            "title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
            "text": "hide"
        },
        "$:/config/EditorTypeMappings/image/gif": {
            "title": "$:/config/EditorTypeMappings/image/gif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/webp": {
            "title": "$:/config/EditorTypeMappings/image/webp",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/heic": {
            "title": "$:/config/EditorTypeMappings/image/heic",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/heif": {
            "title": "$:/config/EditorTypeMappings/image/heif",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpeg": {
            "title": "$:/config/EditorTypeMappings/image/jpeg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/jpg": {
            "title": "$:/config/EditorTypeMappings/image/jpg",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/png": {
            "title": "$:/config/EditorTypeMappings/image/png",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/image/x-icon": {
            "title": "$:/config/EditorTypeMappings/image/x-icon",
            "text": "bitmap"
        },
        "$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
            "title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
            "text": "text"
        },
        "$:/config/Manager/Show": {
            "title": "$:/config/Manager/Show",
            "text": "tiddlers"
        },
        "$:/config/Manager/Filter": {
            "title": "$:/config/Manager/Filter",
            "text": ""
        },
        "$:/config/Manager/Order": {
            "title": "$:/config/Manager/Order",
            "text": "forward"
        },
        "$:/config/Manager/Sort": {
            "title": "$:/config/Manager/Sort",
            "text": "title"
        },
        "$:/config/Manager/System": {
            "title": "$:/config/Manager/System",
            "text": "system"
        },
        "$:/config/Manager/Tag": {
            "title": "$:/config/Manager/Tag",
            "text": ""
        },
        "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
            "title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
            "text": "hide"
        },
        "$:/config/MissingLinks": {
            "title": "$:/config/MissingLinks",
            "text": "yes"
        },
        "$:/config/Navigation/UpdateAddressBar": {
            "title": "$:/config/Navigation/UpdateAddressBar",
            "text": "no"
        },
        "$:/config/Navigation/UpdateHistory": {
            "title": "$:/config/Navigation/UpdateHistory",
            "text": "no"
        },
        "$:/config/NewImageType": {
            "title": "$:/config/NewImageType",
            "text": "jpeg"
        },
        "$:/config/OfficialPluginLibrary": {
            "title": "$:/config/OfficialPluginLibrary",
            "tags": "$:/tags/PluginLibrary",
            "url": "https://tiddlywiki.com/library/v5.1.23/index.html",
            "caption": "{{$:/language/OfficialPluginLibrary}}",
            "text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
        },
        "$:/config/Navigation/openLinkFromInsideRiver": {
            "title": "$:/config/Navigation/openLinkFromInsideRiver",
            "text": "below"
        },
        "$:/config/Navigation/openLinkFromOutsideRiver": {
            "title": "$:/config/Navigation/openLinkFromOutsideRiver",
            "text": "top"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
            "text": "hide"
        },
        "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
            "title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
            "text": "hide"
        },
        "$:/config/Performance/Instrumentation": {
            "title": "$:/config/Performance/Instrumentation",
            "text": "no"
        },
        "$:/config/RegisterPluginType/plugin": {
            "title": "$:/config/RegisterPluginType/plugin",
            "text": "yes"
        },
        "$:/config/RegisterPluginType/theme": {
            "title": "$:/config/RegisterPluginType/theme",
            "text": "no"
        },
        "$:/config/RegisterPluginType/language": {
            "title": "$:/config/RegisterPluginType/language",
            "text": "no"
        },
        "$:/config/RegisterPluginType/info": {
            "title": "$:/config/RegisterPluginType/info",
            "text": "yes"
        },
        "$:/config/RegisterPluginType/import": {
            "title": "$:/config/RegisterPluginType/import",
            "text": "no"
        },
        "$:/config/SaveWikiButton/Template": {
            "title": "$:/config/SaveWikiButton/Template",
            "text": "$:/core/save/all"
        },
        "$:/config/SaverFilter": {
            "title": "$:/config/SaverFilter",
            "text": "[all[]] -[prefix[$:/HistoryList]] -[prefix[$:/StoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
        },
        "$:/config/Search/AutoFocus": {
            "title": "$:/config/Search/AutoFocus",
            "text": "true"
        },
        "$:/config/Search/MinLength": {
            "title": "$:/config/Search/MinLength",
            "text": "3"
        },
        "$:/config/SearchResults/Default": {
            "title": "$:/config/SearchResults/Default",
            "text": "$:/core/ui/DefaultSearchResultList"
        },
        "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]": {
            "title": "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]",
            "text": "yes"
        },
        "$:/config/ShortcutInfo/add-field": {
            "title": "$:/config/ShortcutInfo/add-field",
            "text": "{{$:/language/EditTemplate/Fields/Add/Button/Hint}}"
        },
        "$:/config/ShortcutInfo/advanced-search": {
            "title": "$:/config/ShortcutInfo/advanced-search",
            "text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
        },
        "$:/config/ShortcutInfo/advanced-search-sidebar": {
            "title": "$:/config/ShortcutInfo/advanced-search-sidebar",
            "text": "{{$:/language/Shortcuts/Input/AdvancedSearch/Hint}}"
        },
        "$:/config/ShortcutInfo/bold": {
            "title": "$:/config/ShortcutInfo/bold",
            "text": "{{$:/language/Buttons/Bold/Hint}}"
        },
        "$:/config/ShortcutInfo/cancel-edit-tiddler": {
            "title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
            "text": "{{$:/language/Buttons/Cancel/Hint}}"
        },
        "$:/config/ShortcutInfo/change-sidebar-layout": {
            "title": "$:/config/ShortcutInfo/change-sidebar-layout",
            "text": "{{$:/language/Shortcuts/SidebarLayout/Hint}}"
        },
        "$:/config/ShortcutInfo/delete-field": {
            "title": "$:/config/ShortcutInfo/delete-field",
            "text": "{{$:/language/EditTemplate/Field/Remove/Hint}}"
        },
        "$:/config/ShortcutInfo/excise": {
            "title": "$:/config/ShortcutInfo/excise",
            "text": "{{$:/language/Buttons/Excise/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-1": {
            "title": "$:/config/ShortcutInfo/heading-1",
            "text": "{{$:/language/Buttons/Heading1/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-2": {
            "title": "$:/config/ShortcutInfo/heading-2",
            "text": "{{$:/language/Buttons/Heading2/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-3": {
            "title": "$:/config/ShortcutInfo/heading-3",
            "text": "{{$:/language/Buttons/Heading3/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-4": {
            "title": "$:/config/ShortcutInfo/heading-4",
            "text": "{{$:/language/Buttons/Heading4/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-5": {
            "title": "$:/config/ShortcutInfo/heading-5",
            "text": "{{$:/language/Buttons/Heading5/Hint}}"
        },
        "$:/config/ShortcutInfo/heading-6": {
            "title": "$:/config/ShortcutInfo/heading-6",
            "text": "{{$:/language/Buttons/Heading6/Hint}}"
        },
        "$:/config/ShortcutInfo/input-accept": {
            "title": "$:/config/ShortcutInfo/input-accept",
            "text": "{{$:/language/Shortcuts/Input/Accept/Hint}}"
        },
        "$:/config/ShortcutInfo/input-accept-variant": {
            "title": "$:/config/ShortcutInfo/input-accept-variant",
            "text": "{{$:/language/Shortcuts/Input/AcceptVariant/Hint}}"
        },
        "$:/config/ShortcutInfo/input-cancel": {
            "title": "$:/config/ShortcutInfo/input-cancel",
            "text": "{{$:/language/Shortcuts/Input/Cancel/Hint}}"
        },
        "$:/config/ShortcutInfo/input-down": {
            "title": "$:/config/ShortcutInfo/input-down",
            "text": "{{$:/language/Shortcuts/Input/Down/Hint}}"
        },
        "$:/config/ShortcutInfo/input-tab-left": {
            "title": "$:/config/ShortcutInfo/input-tab-left",
            "text": "{{$:/language/Shortcuts/Input/Tab-Left/Hint}}"
        },
        "$:/config/ShortcutInfo/input-tab-right": {
            "title": "$:/config/ShortcutInfo/input-tab-right",
            "text": "{{$:/language/Shortcuts/Input/Tab-Right/Hint}}"
        },
        "$:/config/ShortcutInfo/input-up": {
            "title": "$:/config/ShortcutInfo/input-up",
            "text": "{{$:/language/Shortcuts/Input/Up/Hint}}"
        },
        "$:/config/ShortcutInfo/italic": {
            "title": "$:/config/ShortcutInfo/italic",
            "text": "{{$:/language/Buttons/Italic/Hint}}"
        },
        "$:/config/ShortcutInfo/layout-switcher": {
            "title": "$:/config/ShortcutInfo/layout-switcher",
            "text": "{{$:/language/LayoutSwitcher/Description}}"
        },
        "$:/config/ShortcutInfo/link": {
            "title": "$:/config/ShortcutInfo/link",
            "text": "{{$:/language/Buttons/Link/Hint}}"
        },
        "$:/config/ShortcutInfo/linkify": {
            "title": "$:/config/ShortcutInfo/linkify",
            "text": "{{$:/language/Buttons/Linkify/Hint}}"
        },
        "$:/config/ShortcutInfo/list-bullet": {
            "title": "$:/config/ShortcutInfo/list-bullet",
            "text": "{{$:/language/Buttons/ListBullet/Hint}}"
        },
        "$:/config/ShortcutInfo/list-number": {
            "title": "$:/config/ShortcutInfo/list-number",
            "text": "{{$:/language/Buttons/ListNumber/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-block": {
            "title": "$:/config/ShortcutInfo/mono-block",
            "text": "{{$:/language/Buttons/MonoBlock/Hint}}"
        },
        "$:/config/ShortcutInfo/mono-line": {
            "title": "$:/config/ShortcutInfo/mono-line",
            "text": "{{$:/language/Buttons/MonoLine/Hint}}"
        },
        "$:/config/ShortcutInfo/new-image": {
            "title": "$:/config/ShortcutInfo/new-image",
            "text": "{{$:/language/Buttons/NewImage/Hint}}"
        },
        "$:/config/ShortcutInfo/new-journal": {
            "title": "$:/config/ShortcutInfo/new-journal",
            "text": "{{$:/language/Buttons/NewJournal/Hint}}"
        },
        "$:/config/ShortcutInfo/new-tiddler": {
            "title": "$:/config/ShortcutInfo/new-tiddler",
            "text": "{{$:/language/Buttons/NewTiddler/Hint}}"
        },
        "$:/config/ShortcutInfo/picture": {
            "title": "$:/config/ShortcutInfo/picture",
            "text": "{{$:/language/Buttons/Picture/Hint}}"
        },
        "$:/config/ShortcutInfo/preview": {
            "title": "$:/config/ShortcutInfo/preview",
            "text": "{{$:/language/Buttons/Preview/Hint}}"
        },
        "$:/config/ShortcutInfo/quote": {
            "title": "$:/config/ShortcutInfo/quote",
            "text": "{{$:/language/Buttons/Quote/Hint}}"
        },
        "$:/config/ShortcutInfo/save-tiddler": {
            "title": "$:/config/ShortcutInfo/save-tiddler",
            "text": "{{$:/language/Buttons/Save/Hint}}"
        },
        "$:/config/ShortcutInfo/save-wiki": {
            "title": "$:/config/ShortcutInfo/save-wiki",
            "text": "{{$:/language/Buttons/SaveWiki/Hint}}"
        },
        "$:/config/ShortcutInfo/sidebar-search": {
            "title": "$:/config/ShortcutInfo/sidebar-search",
            "text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
        },
        "$:/config/ShortcutInfo/stamp": {
            "title": "$:/config/ShortcutInfo/stamp",
            "text": "{{$:/language/Buttons/Stamp/Hint}}"
        },
        "$:/config/ShortcutInfo/strikethrough": {
            "title": "$:/config/ShortcutInfo/strikethrough",
            "text": "{{$:/language/Buttons/Strikethrough/Hint}}"
        },
        "$:/config/ShortcutInfo/subscript": {
            "title": "$:/config/ShortcutInfo/subscript",
            "text": "{{$:/language/Buttons/Subscript/Hint}}"
        },
        "$:/config/ShortcutInfo/superscript": {
            "title": "$:/config/ShortcutInfo/superscript",
            "text": "{{$:/language/Buttons/Superscript/Hint}}"
        },
        "$:/config/ShortcutInfo/toggle-sidebar": {
            "title": "$:/config/ShortcutInfo/toggle-sidebar",
            "text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
        },
        "$:/config/ShortcutInfo/transcludify": {
            "title": "$:/config/ShortcutInfo/transcludify",
            "text": "{{$:/language/Buttons/Transcludify/Hint}}"
        },
        "$:/config/ShortcutInfo/underline": {
            "title": "$:/config/ShortcutInfo/underline",
            "text": "{{$:/language/Buttons/Underline/Hint}}"
        },
        "$:/config/SwitcherTargets/layout": {
            "title": "$:/config/SwitcherTargets/layout",
            "text": "$:/snippets/LayoutSwitcher"
        },
        "$:/config/SwitcherTargets/language": {
            "title": "$:/config/SwitcherTargets/language",
            "text": "$:/snippets/languageswitcher"
        },
        "$:/config/SwitcherTargets/palette": {
            "title": "$:/config/SwitcherTargets/palette",
            "text": "$:/core/ui/ControlPanel/Palette"
        },
        "$:/config/SwitcherTargets/theme": {
            "title": "$:/config/SwitcherTargets/theme",
            "text": "$:/core/ui/ControlPanel/Theme"
        },
        "$:/config/SyncFilter": {
            "title": "$:/config/SyncFilter",
            "text": "[is[tiddler]] -[[$:/core]] -[[$:/library/sjcl.js]] -[prefix[$:/boot/]] -[prefix[$:/HistoryList]] -[status[pending]plugin-type[import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]\n"
        },
        "$:/config/SyncSystemTiddlersFromServer": {
            "title": "$:/config/SyncSystemTiddlersFromServer",
            "text": "no"
        },
        "$:/config/Tags/MinLength": {
            "title": "$:/config/Tags/MinLength",
            "text": "0"
        },
        "$:/config/TextEditor/EditorHeight/Height": {
            "title": "$:/config/TextEditor/EditorHeight/Height",
            "text": "400px"
        },
        "$:/config/TextEditor/EditorHeight/Mode": {
            "title": "$:/config/TextEditor/EditorHeight/Mode",
            "text": "auto"
        },
        "$:/config/TiddlerInfo/Default": {
            "title": "$:/config/TiddlerInfo/Default",
            "text": "$:/core/ui/TiddlerInfo/Fields"
        },
        "$:/config/TiddlerInfo/Mode": {
            "title": "$:/config/TiddlerInfo/Mode",
            "text": "popup"
        },
        "$:/config/Tiddlers/TitleLinks": {
            "title": "$:/config/Tiddlers/TitleLinks",
            "text": "no"
        },
        "$:/config/Toolbar/ButtonClass": {
            "title": "$:/config/Toolbar/ButtonClass",
            "text": "tc-btn-invisible"
        },
        "$:/config/Toolbar/Icons": {
            "title": "$:/config/Toolbar/Icons",
            "text": "yes"
        },
        "$:/config/Toolbar/Text": {
            "title": "$:/config/Toolbar/Text",
            "text": "no"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
            "text": "show"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
            "text": "hide"
        },
        "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
            "title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
            "text": "hide"
        },
        "$:/config/shortcuts-mac/bold": {
            "title": "$:/config/shortcuts-mac/bold",
            "text": "meta-B"
        },
        "$:/config/shortcuts-mac/input-tab-left": {
            "title": "$:/config/shortcuts-mac/input-tab-left",
            "text": "ctrl-Left"
        },
        "$:/config/shortcuts-mac/input-tab-right": {
            "title": "$:/config/shortcuts-mac/input-tab-right",
            "text": "ctrl-Right"
        },
        "$:/config/shortcuts-mac/italic": {
            "title": "$:/config/shortcuts-mac/italic",
            "text": "meta-I"
        },
        "$:/config/shortcuts-mac/underline": {
            "title": "$:/config/shortcuts-mac/underline",
            "text": "meta-U"
        },
        "$:/config/shortcuts-mac/new-image": {
            "title": "$:/config/shortcuts-mac/new-image",
            "text": "ctrl-I"
        },
        "$:/config/shortcuts-mac/new-journal": {
            "title": "$:/config/shortcuts-mac/new-journal",
            "text": "ctrl-J"
        },
        "$:/config/shortcuts-mac/new-tiddler": {
            "title": "$:/config/shortcuts-mac/new-tiddler",
            "text": "ctrl-N"
        },
        "$:/config/shortcuts-mac/save-wiki": {
            "title": "$:/config/shortcuts-mac/save-wiki",
            "text": "meta-S"
        },
        "$:/config/shortcuts-not-mac/bold": {
            "title": "$:/config/shortcuts-not-mac/bold",
            "text": "ctrl-B"
        },
        "$:/config/shortcuts-not-mac/italic": {
            "title": "$:/config/shortcuts-not-mac/italic",
            "text": "ctrl-I"
        },
        "$:/config/shortcuts-not-mac/underline": {
            "title": "$:/config/shortcuts-not-mac/underline",
            "text": "ctrl-U"
        },
        "$:/config/shortcuts-not-mac/new-image": {
            "title": "$:/config/shortcuts-not-mac/new-image",
            "text": "alt-I"
        },
        "$:/config/shortcuts-not-mac/new-journal": {
            "title": "$:/config/shortcuts-not-mac/new-journal",
            "text": "alt-J"
        },
        "$:/config/shortcuts-not-mac/new-tiddler": {
            "title": "$:/config/shortcuts-not-mac/new-tiddler",
            "text": "alt-N"
        },
        "$:/config/shortcuts/add-field": {
            "title": "$:/config/shortcuts/add-field",
            "text": "enter"
        },
        "$:/config/shortcuts/advanced-search": {
            "title": "$:/config/shortcuts/advanced-search",
            "text": "ctrl-shift-A"
        },
        "$:/config/shortcuts/advanced-search-sidebar": {
            "title": "$:/config/shortcuts/advanced-search-sidebar",
            "text": "alt-Enter"
        },
        "$:/config/shortcuts/cancel-edit-tiddler": {
            "title": "$:/config/shortcuts/cancel-edit-tiddler",
            "text": "escape"
        },
        "$:/config/shortcuts/change-sidebar-layout": {
            "title": "$:/config/shortcuts/change-sidebar-layout",
            "text": "shift-alt-Down"
        },
        "$:/config/shortcuts/delete-field": {
            "title": "$:/config/shortcuts/delete-field",
            "text": "shift-alt-D"
        },
        "$:/config/shortcuts/excise": {
            "title": "$:/config/shortcuts/excise",
            "text": "ctrl-E"
        },
        "$:/config/shortcuts/sidebar-search": {
            "title": "$:/config/shortcuts/sidebar-search",
            "text": "ctrl-shift-F"
        },
        "$:/config/shortcuts/heading-1": {
            "title": "$:/config/shortcuts/heading-1",
            "text": "ctrl-1"
        },
        "$:/config/shortcuts/heading-2": {
            "title": "$:/config/shortcuts/heading-2",
            "text": "ctrl-2"
        },
        "$:/config/shortcuts/heading-3": {
            "title": "$:/config/shortcuts/heading-3",
            "text": "ctrl-3"
        },
        "$:/config/shortcuts/heading-4": {
            "title": "$:/config/shortcuts/heading-4",
            "text": "ctrl-4"
        },
        "$:/config/shortcuts/heading-5": {
            "title": "$:/config/shortcuts/heading-5",
            "text": "ctrl-5"
        },
        "$:/config/shortcuts/heading-6": {
            "title": "$:/config/shortcuts/heading-6",
            "text": "ctrl-6"
        },
        "$:/config/shortcuts/input-accept": {
            "title": "$:/config/shortcuts/input-accept",
            "text": "Enter"
        },
        "$:/config/shortcuts/input-accept-variant": {
            "title": "$:/config/shortcuts/input-accept-variant",
            "text": "ctrl-Enter"
        },
        "$:/config/shortcuts/input-cancel": {
            "title": "$:/config/shortcuts/input-cancel",
            "text": "Escape"
        },
        "$:/config/shortcuts/input-down": {
            "title": "$:/config/shortcuts/input-down",
            "text": "Down"
        },
        "$:/config/shortcuts/input-tab-left": {
            "title": "$:/config/shortcuts/input-tab-left",
            "text": "alt-Left"
        },
        "$:/config/shortcuts/input-tab-right": {
            "title": "$:/config/shortcuts/input-tab-right",
            "text": "alt-Right"
        },
        "$:/config/shortcuts/input-up": {
            "title": "$:/config/shortcuts/input-up",
            "text": "Up"
        },
        "$:/config/shortcuts/layout-switcher": {
            "title": "$:/config/shortcuts/layout-switcher",
            "text": "ctrl-shift-L"
        },
        "$:/config/shortcuts/link": {
            "title": "$:/config/shortcuts/link",
            "text": "ctrl-L"
        },
        "$:/config/shortcuts/linkify": {
            "title": "$:/config/shortcuts/linkify",
            "text": "alt-shift-L"
        },
        "$:/config/shortcuts/list-bullet": {
            "title": "$:/config/shortcuts/list-bullet",
            "text": "ctrl-shift-L"
        },
        "$:/config/shortcuts/list-number": {
            "title": "$:/config/shortcuts/list-number",
            "text": "ctrl-shift-N"
        },
        "$:/config/shortcuts/mono-block": {
            "title": "$:/config/shortcuts/mono-block",
            "text": "ctrl-shift-M"
        },
        "$:/config/shortcuts/mono-line": {
            "title": "$:/config/shortcuts/mono-line",
            "text": "ctrl-M"
        },
        "$:/config/shortcuts/picture": {
            "title": "$:/config/shortcuts/picture",
            "text": "ctrl-shift-I"
        },
        "$:/config/shortcuts/preview": {
            "title": "$:/config/shortcuts/preview",
            "text": "alt-P"
        },
        "$:/config/shortcuts/quote": {
            "title": "$:/config/shortcuts/quote",
            "text": "ctrl-Q"
        },
        "$:/config/shortcuts/save-tiddler": {
            "title": "$:/config/shortcuts/save-tiddler",
            "text": "ctrl+enter"
        },
        "$:/config/shortcuts/save-wiki": {
            "title": "$:/config/shortcuts/save-wiki",
            "text": "ctrl-S"
        },
        "$:/config/shortcuts/stamp": {
            "title": "$:/config/shortcuts/stamp",
            "text": "ctrl-S"
        },
        "$:/config/shortcuts/strikethrough": {
            "title": "$:/config/shortcuts/strikethrough",
            "text": "ctrl-T"
        },
        "$:/config/shortcuts/subscript": {
            "title": "$:/config/shortcuts/subscript",
            "text": "ctrl-shift-B"
        },
        "$:/config/shortcuts/superscript": {
            "title": "$:/config/shortcuts/superscript",
            "text": "ctrl-shift-P"
        },
        "$:/config/shortcuts/toggle-sidebar": {
            "title": "$:/config/shortcuts/toggle-sidebar",
            "text": "alt-shift-S"
        },
        "$:/config/shortcuts/transcludify": {
            "title": "$:/config/shortcuts/transcludify",
            "text": "alt-shift-T"
        },
        "$:/config/ui/EditTemplate": {
            "title": "$:/config/ui/EditTemplate",
            "text": "$:/core/ui/EditTemplate"
        },
        "$:/config/ui/ViewTemplate": {
            "title": "$:/config/ui/ViewTemplate",
            "text": "$:/core/ui/ViewTemplate"
        },
        "$:/config/WikiParserRules/Inline/wikilink": {
            "title": "$:/config/WikiParserRules/Inline/wikilink",
            "text": "enable"
        },
        "$:/snippets/currpalettepreview": {
            "title": "$:/snippets/currpalettepreview",
            "text": "\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch-inner()\n<$set name=\"swatchColour\" value={{##$(colourResolved)$}}>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}>\n<$set name=\"swatchTitle\" value=<<colour>>>\n<$list filter=\"[<swatchColour>!prefix[<<colour ]!suffix[>>]]\" variable=\"ignore\">\n<div class=\"tc-swatch\" style=<<swatchStyle>> title=<<swatchTitle>>/>\n</$list>\n<$list filter=\"[<swatchColour>prefix[<<colour ]suffix[>>]]\" variable=\"ignore\">\n<$wikify name=\"colourResolved\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall=<<swatchColour>>/>\"\"\">\n<<swatch-inner>>\n</$wikify>\n</$list>\n</$set>\n</$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>\n"
        },
        "$:/snippets/download-wiki-button": {
            "title": "$:/snippets/download-wiki-button",
            "text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
        },
        "$:/language": {
            "title": "$:/language",
            "text": "$:/languages/en-GB"
        },
        "$:/snippets/languageswitcher": {
            "title": "$:/snippets/languageswitcher",
            "text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/core/macros/CSS": {
            "title": "$:/core/macros/CSS",
            "tags": "$:/tags/Macro",
            "text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"><$transclude tiddler=\"$:/config/DefaultColourMappings/$name$\"/></$transclude></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n  -webkit-box-shadow: $shadow$;\n     -moz-box-shadow: $shadow$;\n          box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n  -webkit-filter: $filter$;\n     -moz-filter: $filter$;\n          filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n  -webkit-transition: $transition$;\n     -moz-transition: $transition$;\n          transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n  -webkit-transform-origin: $origin$;\n     -moz-transform-origin: $origin$;\n          transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
        },
        "$:/core/macros/colour-picker": {
            "title": "$:/core/macros/colour-picker",
            "tags": "$:/tags/Macro",
            "text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<span style=\"display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/>\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
        },
        "$:/core/macros/copy-to-clipboard": {
            "title": "$:/core/macros/copy-to-clipboard",
            "tags": "$:/tags/Macro",
            "text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
        },
        "$:/core/macros/diff": {
            "title": "$:/core/macros/diff",
            "tags": "$:/tags/Macro",
            "text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
        },
        "$:/core/macros/dumpvariables": {
            "title": "$:/core/macros/dumpvariables",
            "tags": "$:/tags/Macro",
            "text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
        },
        "$:/core/macros/export": {
            "title": "$:/core/macros/export",
            "tags": "$:/tags/Macro",
            "text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$set name=\"count\" value={{{ [subfilter<__exportFilter__>count[]] }}}>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$list filter=\"[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] ~[<currentTiddler>!has[condition]then[true]]\" variable=\"ignore\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=<<__exportFilter__>> filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</$list>\n</$set>\n</div>\n</$reveal>\n\\end\n"
        },
        "$:/core/macros/image-picker": {
            "title": "$:/core/macros/image-picker",
            "created": "20170715180840889",
            "modified": "20170715180914005",
            "tags": "$:/tags/Macro",
            "type": "text/vnd.tiddlywiki",
            "text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
        },
        "$:/core/macros/keyboard-driven-input": {
            "title": "$:/core/macros/keyboard-driven-input",
            "tags": "$:/tags/Macro",
            "text": "\\define change-input-tab(stateTitle,tag,beforeafter,defaultState,actions)\n<$set name=\"tabsList\" filter=\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]]\">\n<$vars currentState={{{ [<__stateTitle__>!is[missing]get[text]] ~[<__defaultState__>] }}} firstTab={{{ [enlist<tabsList>nth[1]] }}} lastTab={{{ [enlist<tabsList>last[]] }}}>\n<$set name=\"nextTab\" value={{{ [all[shadows+tiddlers]tag<__tag__>!has[draft.of]$beforeafter$<currentState>] ~[[$beforeafter$]removeprefix[after]suffix[]addprefix<firstTab>] ~[[$beforeafter$]removeprefix[before]suffix[]addprefix<lastTab>] }}}>\n<$action-setfield $tiddler=<<__stateTitle__>> text=<<nextTab>>/>\n$actions$\n</$set>\n</$vars>\n</$set>\n\\end\n\n\\define keyboard-input-actions()\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>get<__field__>] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__storeTitle__>> text={{{ [<__tiddler__>getindex<__index__>] }}}/>\n</$list>\n\\end\n\n\\define input-next-actions-inner()\n<$list filter=\"[<nextItem>minlength[1]]\" variable=\"ignore\">\n<$action-setfield $tiddler=<<__selectionStateTitle__>> text=<<nextItem>>/>\n<$list filter=\"[<__index__>match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $field=<<__field__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$list filter=\"[<__index__>!match[]]\">\n<$action-setfield $tiddler=<<__tiddler__>> $index=<<__index__>> $value={{{ [<nextItem>] +[splitregexp[(?:.(?!-))+$]] }}}/>\n</$list>\n<$action-setfield $tiddler=<<__refreshTitle__>> text=\"yes\"/>\n</$list>\n\\end\n\n\\define input-next-actions(afterOrBefore:\"after\",reverse:\"\")\n<$list filter=\"[<__storeTitle__>get[text]minlength<__filterMinLength__>] [<__filterMinLength__>match[0]] +[limit[1]]\" variable=\"ignore\">\n<$vars userInput={{{ [<__storeTitle__>get[text]] }}} selectedItem={{{ [<__selectionStateTitle__>get[text]] }}}>\n<$set name=\"configTiddler\" value={{{ [subfilter<__configTiddlerFilter__>] }}}>\n<$vars primaryListFilter={{{ [<configTiddler>get<__firstSearchFilterField__>] }}} secondaryListFilter={{{ [<configTiddler>get<__secondSearchFilterField__>] }}}>\n<$set name=\"filteredList\" filter=\"[subfilter<primaryListFilter>addsuffix[-primaryList]] =[subfilter<secondaryListFilter>addsuffix[-secondaryList]]\">\n<$vars nextItem={{{ [enlist<filteredList>$afterOrBefore$<selectedItem>] ~[enlist<filteredList>$reverse$nth[1]] }}} firstItem={{{ [enlist<filteredList>nth[1]] }}} lastItem={{{ [enlist<filteredList>last[]] }}}>\n<$list filter=\"[<selectedItem>match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[before]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<lastItem>!match<firstItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [[$afterOrBefore$]match[after]then<userInput>addsuffix[-userInput]] ~[<nextItem>] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>match<firstItem>match<lastItem>]\" variable=\"ignore\">\n<$set name=\"nextItem\" value={{{ [<userInput>addsuffix[-userInput]] }}}>\n<<input-next-actions-inner>>\n</$set>\n</$list>\n<$list filter=\"[<selectedItem>!match<firstItem>!match<lastItem>]\" variable=\"ignore\">\n<<input-next-actions-inner>>\n</$list>\n</$vars>\n</$set>\n</$vars>\n</$set>\n</$vars>\n</$list>\n\\end\n\n\\define keyboard-driven-input(tiddler,storeTitle,field:\"text\",index:\"\",tag:\"input\",type,focus:\"\",inputAcceptActions,inputAcceptVariantActions,inputCancelActions,placeholder:\"\",default:\"\",class,focusPopup,rows,minHeight,tabindex,size,autoHeight,filterMinLength:\"0\",refreshTitle,selectionStateTitle,cancelPopups:\"\",configTiddlerFilter,firstSearchFilterField:\"first-search-filter\",secondSearchFilterField:\"second-search-filter\")\n\\whitespace trim\n<$keyboard key=\"((input-accept))\" actions=<<__inputAcceptActions__>>>\n<$keyboard key=\"((input-accept-variant))\" actions=<<__inputAcceptVariantActions__>>>\n<$keyboard key=\"((input-up))\" actions=<<input-next-actions \"before\" \"reverse[]\">>>\n<$keyboard key=\"((input-down))\" actions=<<input-next-actions>>>\n<$keyboard key=\"((input-cancel))\" actions=<<__inputCancelActions__>>>\n<$edit-text tiddler=<<__tiddler__>> field=<<__field__>> index=<<__index__>> \n\t\tinputActions=<<keyboard-input-actions>> tag=<<__tag__>> class=<<__class__>> \n\t\tplaceholder=<<__placeholder__>> default=<<__default__>> focusPopup=<<__focusPopup__>> \n\t\tfocus=<<__focus__>> type=<<__type__>> rows=<<__rows__>> minHeight=<<__minHeight__>> \n\t\ttabindex=<<__tabindex__>> size=<<__size__>> autoHeight=<<__autoHeight__>> \n\t\trefreshTitle=<<__refreshTitle__>> cancelPopups=<<__cancelPopups__>>/>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n</$keyboard>\n\\end\n"
        },
        "$:/core/macros/lingo": {
            "title": "$:/core/macros/lingo",
            "tags": "$:/tags/Macro",
            "text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
        },
        "$:/core/macros/list": {
            "title": "$:/core/macros/list",
            "tags": "$:/tags/Macro",
            "text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\">\n{{$:/core/images/blank}}\n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$type$>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
        },
        "$:/core/macros/tabs": {
            "title": "$:/core/macros/tabs",
            "tags": "$:/tags/Macro",
            "text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain,actions,explicitState)\n<$set name=\"qualifiedState\" value=<<qualify \"$state$\">>>\n<$vars tabsState={{{ [<__explicitState__>minlength[1]] ~[<qualifiedState>] }}}>\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<tabsState>> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler>$actions$</$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<tabsState>> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n</$vars>\n</$set>\n\\end\n"
        },
        "$:/core/macros/tag-picker": {
            "title": "$:/core/macros/tag-picker",
            "tags": "$:/tags/Macro",
            "first-search-filter": "[tags[]!is[system]search:title<userInput>sort[]]",
            "second-search-filter": "[tags[]is[system]search:title<userInput>sort[]]",
            "text": "\\define get-tagpicker-focus-selector() [data-tiddler-title=\"$(currentTiddlerCSSEscaped)$\"] .tc-add-tag-name input\n\n\\define delete-tag-state-tiddlers() <$action-deletetiddler $filter=\"[<newTagNameTiddler>] [<storeTitle>] [<tagSelectionState>]\"/>\n\n\\define add-tag-actions(actions,tagField:\"tags\")\n<$set name=\"tag\" value={{{ [<__tiddler__>get[text]] }}}>\n<$list filter=\"[<saveTiddler>!contains:$tagField$<tag>!match[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"-[<tag>]\"/>\n\"\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n</$list>\n</$set>\n<<delete-tag-state-tiddlers>>\n<$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n\\end\n\n\\define clear-tags-actions-inner()\n<$list filter=\"[<storeTitle>has[text]] [<newTagNameTiddler>has[text]]\" variable=\"ignore\" emptyMessage=\"\"\"<<cancel-delete-tiddler-actions \"cancel\">>\"\"\">\n<<delete-tag-state-tiddlers>>\n</$list>\n\\end\n\n\\define clear-tags-actions()\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<newTagNameTiddler>get[text]!match<userInput>]\" emptyMessage=\"\"\"<<clear-tags-actions-inner>>\"\"\">\n<$action-setfield $tiddler=<<newTagNameTiddler>> text=<<userInput>>/><$action-setfield $tiddler=<<refreshTitle>> text=\"yes\"/>\n</$list>\n</$set>\n\\end\n\n\\define tag-picker-inner(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars newTagNameInputTiddlerQualified=<<qualify \"$:/temp/NewTagName/input\">> newTagNameSelectionTiddlerQualified=<<qualify \"$:/temp/NewTagName/selected-item\">> fallbackTarget={{$(palette)$##tag-background}} colourA={{$(palette)$##foreground}} colourB={{$(palette)$##background}}>\n<$vars storeTitle={{{ [<newTagNameInputTiddler>!match[]] ~[<newTagNameInputTiddlerQualified>] }}} tagSelectionState={{{ [<newTagNameSelectionTiddler>!match[]] ~[<newTagNameSelectionTiddlerQualified>] }}}>\n<$vars refreshTitle=<<qualify \"$:/temp/NewTagName/refresh\">> nonSystemTagsFilter=\"[tags[]!is[system]search:title<userInput>sort[]]\" systemTagsFilter=\"[tags[]is[system]search:title<userInput>sort[]]\">\n<div class=\"tc-edit-add-tag\">\n<div>\n<span class=\"tc-add-tag-name tc-small-gap-right\">\n<$macrocall $name=\"keyboard-driven-input\" tiddler=<<newTagNameTiddler>> storeTitle=<<storeTitle>> refreshTitle=<<refreshTitle>>\n\t\tselectionStateTitle=<<tagSelectionState>> inputAcceptActions=\"\"\"<$macrocall $name=\"add-tag-actions\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\"\n\t\tinputCancelActions=<<clear-tags-actions>> tag=\"input\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}}\n\t\tfocusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>> \n\t\tfocus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}} filterMinLength={{$:/config/Tags/MinLength}} \n\t\tcancelPopups=<<cancelPopups>> configTiddlerFilter=\"[[$:/core/macros/tag-picker]]\"/>\n</span><$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button><$reveal state=<<storeTitle>> type=\"nomatch\" text=\"\"><$button class=\"tc-btn-invisible tc-small-gap tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Tags/ClearInput/Hint}} aria-label={{$:/language/EditTemplate/Tags/ClearInput/Caption}}>{{$:/core/images/close-button}}<<delete-tag-state-tiddlers>></$button></$reveal><span class=\"tc-add-tag-button tc-small-gap-left\">\n<$set name=\"tag\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$button set=<<newTagNameTiddler>> setTo=\"\" class=\"\">\n<$action-listops $tiddler=<<saveTiddler>> $field=<<__tagField__>> $subfilter=\"[<tag>]\"/>\n$actions$\n<$set name=\"currentTiddlerCSSEscaped\" value={{{ [<saveTiddler>escapecss[]] }}}>\n<<delete-tag-state-tiddlers>><$action-sendmessage $message=\"tm-focus-selector\" $param=<<get-tagpicker-focus-selector>>/>\n</$set>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-block-tags-dropdown\">\n<$set name=\"userInput\" value={{{ [<storeTitle>get[text]] }}}>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<nonSystemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-primaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n<hr>\n<$list filter=\"[<userInput>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=<<systemTagsFilter>> variable=\"tag\">\n<$list filter=\"[<tag>addsuffix[-secondaryList]] -[<tagSelectionState>get[text]]\" emptyMessage=\"\"\"<$vars button-classes=\"tc-btn-invisible tc-tag-button-selected\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\"\"\">\n<$vars button-classes=\"tc-btn-invisible\" actions=<<__actions__>> tagField=<<__tagField__>> currentTiddler=<<tag>>>{{||$:/core/ui/TagPickerTagTemplate}}</$vars>\n</$list>\n</$list></$list>\n</$set>\n</div>\n</$reveal>\n</div>\n</div>\n</$vars>\n</$vars>\n</$vars>\n\\end\n\\define tag-picker(actions,tagField:\"tags\")\n\\whitespace trim\n<$vars saveTiddler=<<currentTiddler>> palette={{$:/palette}}>\n<$list filter=\"[<newTagNameTiddler>match[]]\" emptyMessage=\"\"\"<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\"\"\">\n<$set name=\"newTagNameTiddler\" value=<<qualify \"$:/temp/NewTagName\">>>\n<$macrocall $name=\"tag-picker-inner\" actions=<<__actions__>> tagField=<<__tagField__>>/>\n</$set>\n</$list>\n</$vars>\n\\end\n"
        },
        "$:/core/macros/tag": {
            "title": "$:/core/macros/tag",
            "tags": "$:/tags/Macro",
            "text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
        },
        "$:/core/macros/thumbnails": {
            "title": "$:/core/macros/thumbnails",
            "tags": "$:/tags/Macro",
            "text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
        },
        "$:/core/macros/timeline": {
            "title": "$:/core/macros/timeline",
            "created": "20141212105914482",
            "modified": "20141212110330815",
            "tags": "$:/tags/Macro",
            "text": "\\define timeline-title()\n\\whitespace trim\n<!-- Override this macro with a global macro \n     of the same name if you need to change \n     how titles are displayed on the timeline \n     -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><<timeline-title>></$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
        },
        "$:/core/macros/toc": {
            "title": "$:/core/macros/toc",
            "tags": "$:/tags/Macro",
            "text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n  <$transclude field=\"caption\">\n    <$view field=\"title\"/>\n  </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n  <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n    <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n      <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n        <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n          <li class=<<toc-item-class>>>\n            <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}><$view field='caption'><$view field='title'/></$view></$link>\">\n              <<toc-caption>>\n            </$list>\n            <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n          </li>\n        </$set>\n      </$set>\n    </$vars>\n  </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\"  tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n    <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n      <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/right-arrow}}\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/down-arrow}}\n        </$button>\n      </$reveal>\n      <<toc-caption>>\n    </$link>\n    <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n      <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n    </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n      <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/right-arrow}}\n          <<toc-caption>>\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n          {{$:/core/images/down-arrow}}\n          <<toc-caption>>\n        </$button>\n      </$reveal>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n  <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n    <ol class=\"tc-toc toc-expandable\">\n      <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n        <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n          <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n        </$list>\n      </$list>\n    </ol>\n  </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n    <li class=<<toc-item-class>>>\n      <$link to={{{ [<currentTiddler>get[target]else<currentTiddler>] }}}>\n          <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n          <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n            <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n              {{$:/core/images/right-arrow}}\n            </$button>\n          </$reveal>\n          <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n            <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n              {{$:/core/images/down-arrow}}\n            </$button>\n          </$reveal>\n        </$list>\n        <<toc-caption>>\n      </$link>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n  <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n    <li class=<<toc-item-class>>>\n      <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n        <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n          <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n            {{$:/core/images/right-arrow}}\n            <<toc-caption>>\n          </$button>\n        </$reveal>\n        <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n          <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n            {{$:/core/images/down-arrow}}\n            <<toc-caption>>\n          </$button>\n        </$reveal>\n      </$list>\n      <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n      </$reveal>\n    </li>\n  </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n  <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n    <ol class=\"tc-toc toc-selective-expandable\">\n      <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n        <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n          <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n        </$list>\n      </$list>\n    </ol>\n  </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n  <div class=\"tc-tabbed-table-of-contents\">\n    <$linkcatcher to=<<__selectedTiddler__>>>\n      <div class=\"tc-table-of-contents\">\n        <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n      </div>\n    </$linkcatcher>\n    <div class=\"tc-tabbed-table-of-contents-content\">\n      <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n        <$transclude mode=\"block\" tiddler=<<__template__>>>\n          <h1><<toc-caption>></h1>\n          <$transclude mode=\"block\">$missingText$</$transclude>\n        </$transclude>\n      </$reveal>\n      <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n        $unselectedText$\n      </$reveal>\n    </div>\n  </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n  <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
        },
        "$:/core/macros/translink": {
            "title": "$:/core/macros/translink",
            "tags": "$:/tags/Macro",
            "text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/tree": {
            "title": "$:/core/macros/tree",
            "tags": "$:/tags/Macro",
            "text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
        },
        "$:/core/macros/utils": {
            "title": "$:/core/macros/utils",
            "text": "\\define colour(colour)\n$colour$\n\\end\n"
        },
        "$:/snippets/minifocusswitcher": {
            "title": "$:/snippets/minifocusswitcher",
            "text": "<$select tiddler=\"$:/config/AutoFocus\">\n<$list filter=\"title tags text type fields\">\n<option value=<<currentTiddler>>><<currentTiddler>></option>\n</$list>\n</$select>\n"
        },
        "$:/snippets/minilanguageswitcher": {
            "title": "$:/snippets/minilanguageswitcher",
            "text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/minithemeswitcher": {
            "title": "$:/snippets/minithemeswitcher",
            "text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
        },
        "$:/snippets/modules": {
            "title": "$:/snippets/modules",
            "text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
        },
        "$:/palette": {
            "title": "$:/palette",
            "text": "$:/palettes/Vanilla"
        },
        "$:/snippets/paletteeditor": {
            "title": "$:/snippets/paletteeditor",
            "text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
        },
        "$:/snippets/palettepreview": {
            "title": "$:/snippets/palettepreview",
            "text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
        },
        "$:/snippets/paletteswitcher": {
            "title": "$:/snippets/paletteswitcher",
            "text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
        },
        "$:/snippets/peek-stylesheets": {
            "title": "$:/snippets/peek-stylesheets",
            "text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
        },
        "$:/temp/search": {
            "title": "$:/temp/search",
            "text": ""
        },
        "$:/tags/AdvancedSearch": {
            "title": "$:/tags/AdvancedSearch",
            "list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
        },
        "$:/tags/AdvancedSearch/FilterButton": {
            "title": "$:/tags/AdvancedSearch/FilterButton",
            "list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
        },
        "$:/tags/ControlPanel": {
            "title": "$:/tags/ControlPanel",
            "list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
        },
        "$:/tags/ControlPanel/Info": {
            "title": "$:/tags/ControlPanel/Info",
            "list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
        },
        "$:/tags/ControlPanel/Plugins": {
            "title": "$:/tags/ControlPanel/Plugins",
            "list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
        },
        "$:/tags/EditTemplate": {
            "title": "$:/tags/EditTemplate",
            "list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
        },
        "$:/tags/EditToolbar": {
            "title": "$:/tags/EditToolbar",
            "list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
        },
        "$:/tags/EditorToolbar": {
            "title": "$:/tags/EditorToolbar",
            "list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
        },
        "$:/tags/Manager/ItemMain": {
            "title": "$:/tags/Manager/ItemMain",
            "list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
        },
        "$:/tags/Manager/ItemSidebar": {
            "title": "$:/tags/Manager/ItemSidebar",
            "list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
        },
        "$:/tags/MoreSideBar": {
            "title": "$:/tags/MoreSideBar",
            "list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
            "text": ""
        },
        "$:/tags/PageControls": {
            "title": "$:/tags/PageControls",
            "list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
        },
        "$:/tags/PageTemplate": {
            "title": "$:/tags/PageTemplate",
            "list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
            "text": ""
        },
        "$:/tags/PluginLibrary": {
            "title": "$:/tags/PluginLibrary",
            "list": "$:/config/OfficialPluginLibrary"
        },
        "$:/tags/SideBar": {
            "title": "$:/tags/SideBar",
            "list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
            "text": ""
        },
        "$:/tags/SideBarSegment": {
            "title": "$:/tags/SideBarSegment",
            "list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
        },
        "$:/tags/TiddlerInfo": {
            "title": "$:/tags/TiddlerInfo",
            "list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
            "text": ""
        },
        "$:/tags/TiddlerInfo/Advanced": {
            "title": "$:/tags/TiddlerInfo/Advanced",
            "list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
        },
        "$:/tags/ViewTemplate": {
            "title": "$:/tags/ViewTemplate",
            "list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
        },
        "$:/tags/ViewToolbar": {
            "title": "$:/tags/ViewToolbar",
            "list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
        },
        "$:/snippets/themeswitcher": {
            "title": "$:/snippets/themeswitcher",
            "text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        },
        "$:/core/wiki/title": {
            "title": "$:/core/wiki/title",
            "text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
        },
        "$:/view": {
            "title": "$:/view",
            "text": "classic"
        },
        "$:/snippets/viewswitcher": {
            "title": "$:/snippets/viewswitcher",
            "text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser tc-viewswitcher\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
        }
    }
}
Notebook
main
index.html
pmgeuze/nomen-nescio
pmgeuze
The following tiddlers were imported:

# [[Wargames Foundry 127B]]
# [[Wargames Foundry 127C]]
# [[Wargames Foundry 127D]]
# [[Wargames Foundry 127E]]
# [[Wargames Foundry 127F]]
# [[Wargames Foundry Paints]]
# [[Wargames Foundry]]
# [[Wargames]]
# [[WellStar Medical Group East Paulding Primary Care Center]]
# [[West End's Tank Leader Series]]
# [[Whist]]
# [[White Whale Pod Fit]]
# [[WoFun Miniatures]]
# [[With Pyjamas through the Desert]]
# [[WW1 Uniform Triads from AK Interactive]]
# [["A" Company, 2 Battalion, The Princess Victoria's (Royal Irish Fusilers), Sudan 1884.]]
# [[_redirect to]]
# [[1st Battalion Welsh Guards]]
# [[1st Corps Holt Artillery Tractor, a scratchbuilt towing limber and an 8 inch howitzer from HLBSCo.]]
# [[1st Cuirassier Armoured Regiment]]
# [[2nd Cuirassier Armoured Regiment]]
# [[1st Regiment d' Cuirassier]]
# [[2nd Regiment d' Cuirassier]]
# [[3D Printing]]
# [[3D STL Models]]
# [[3D STL Models:Hobby Tools]]
# [[3e Division Légère Mécanique]]
# [[4th January 2021]]
# [[4th Royal Tank Regiment]]
# [[5th (Royal Irish) Lancers]]
# [[5th January 2021]]
# [[5th Light Mechanized Armoured Brigade]]
# [[5th Panzer Division]]
# [[6th Durham Light Infantry (DLI)]]
# [[6th Infantry]]
# [[7th Infantry]]
# [[​7th Kradschutzen Battalion]]
# [[7th Panzer Division]]
# [[7th Royal Tank Regiment (-)]]
# [[8th Aufklaurungs Battalion]]
# [[8th Durham Light Infantry (DLI)]]
# [[8th January 2021]]
# [[9th December 2020]]
# [[9th January 2021]]
# [[10mm Basing Ideas]]
# [[10mm Early War German - Black Green Ink - 30th September 2020]]
# [[10mm Early War German - Contrast - 30th September 2020]]
# [[10mm Early War German - Contrast Medium - 30th September 2020]]
# [[10mm Early War German - Future - 30th September 2020]]
# [[10th January 2021]]
# [[11th December 2020]]
# [[11th January 2021]]
# [[11th Regiment de Dragoons]]
# [[12th Cuirassier Reconnaissance]]
# [[12th December 2020]]
# [[13th Escadron d' Anti-Char (Anti-tank)]]
# [[13th Infantry Regiment]]
# [[14th Infantry Regiment]]
# [[15th Panzer Regiment]]
# [[18th December 2020]]
# [[22nd December 2020]]
# [[25th Panzer Regiment]]
# [[26th Battery/52nd (6th London) Anti-Tank Regiment, Royal Artillery]]
# [[26th December 2020]]
# [[27th December 2020]]
# [[28mm Terracotta Army]]
# [[31st Panzer Regiment]]
# [[37th Aufklaurungs Battalion]]
# [[​39th Bataillion du Genie]]
# [[​58th Pioneer]]
# [[59th Flak]]
# [[70.984 - Flat Brown.tid]]
# [[75mm Mle 1897]]
# [[​76th Regiment d' Artillerie]]
# [[78th Feldartillerie]]
# [[86th Flak]]
# [[89th Pioneer Battalion]]
# [[93rd FLAK Battalion]]
# [[116th Field Artillery]]
# [[206th Battery/52nd (6th London) Anti-Tank Regiment, Royal Artillery]]
# [[260th Battery/65th Antitank Regiment Royal Artillery]]
# [[352nd Battery/91st Royal Artillery]]
# [[365th Battery/92nd Royal Artillery]]
# [[368th Battery/92nd Royal Artillery]]
# [[705th Feldartillerie]]
# [[1936 Guerra Civil]]
# [[A Coat of Steel]]
# [[A Coy/4th Battalion Royal Northumberland Fusiliers]]
# [[Abaddon The Despoiler]]
# [[Abaddon's 13th Black Crusade]]
# [[Achtung! Flugzeug!]]
# [[Adding a table of contents to the sidebar]]
# [[Adeptus Mechanicus Fleet]]
# [[AHK Multiboxing]]
# [[Air War C21]]
# [[AK Interactive AK1173]]
# [[AK Interactive AK4041]]
# [[AK Interactive AK11169]]
# [[AK Interactive Paints]]
# [[Alone Among the Stars - 2nd October 2020]]
# [[Artmaster Studio]]
# [[Atropos Wolfgang]]
# [[Audible]]
# [[Auto Linking]]
# [[AutoTagging in TiddlyWiki - 2nd October 2020]]
# [[Badger Regdab NeedleJuice]]
# [[Bakara’s Chariot]]
# [[base.tid]]
# [[Battlefleet Gothic:Order Dice]]
# [[BEF Frankforce - Left Column]]
# [[BEF Frankforce - Right Column]]
# [[BEF Petreforce]]
# [[Best Photo Organizing Software 2020]]
# [[Better Shelter.org]]
# [[Black and Decker Alligator LP1000]]
# [[Black Chantry Productions]]
# [[Black Powder Snowmen]]
# [[Black Powder]]
# [[Black Powder:Rebellion]]
# [[Black Powder:Sudan]]
# [[Black Templars Space Marine Fleet]]
# [[Blitzkreig Commander:ToE]]
# [[Blitzkrieg Commander]]
# [[Blue Jackets to the Front]]
# [[Boardgames]]
# [[Bookmarks]]
# [[Bookmarks:Personal]]
# [[Books to Read (Listen to)]]
# [[Brave Sync Code]]
# [[British - Early War]]
# [[British Forces of the Battle of Arras]]
# [[British Symbol]]
# [[Bruce Hyde]]
# [[Brush Strokes]]
# [[Burnaby Captures Two]]
# [[Burrows & Badgers]]
# [[Captain Sir Evan Wellesley]]
# [[Chaos Abyss-class Battleship.information]]
# [[Chaos Devastation Class Cruiser]]
# [[Chaos Hubris Class Heavy Cruiser]]
# [[Chaos Iconoclast Destroyer Class]]
# [[Chaos Incursion Fleet]]
# [[Chaos Repulsive Class Grand Cruiser.information]]
# [[Chaos Ship Class]]
# [[Charlie's Year]]
# [[Chocolatey]]
# [[Citadel 21-29]]
# [[Citadel 21-35]]
# [[Citadel 21-36]]
# [[Citadel 21-37]]
# [[Citadel 21-38]]
# [[Citadel 21-39]]
# [[Citadel 21-40]]
# [[Citadel 21-41]]
# [[Citadel 21-42]]
# [[Citadel 21-43]]
# [[Citadel 21-44]]
# [[Citadel 21-45]]
# [[Citadel 21-46]]
# [[Citadel 21-47]]
# [[Citadel 21-48]]
# [[Citadel 21-49]]
# [[Citadel 21-50]]
# [[Citadel 21-51]]
# [[Citadel 21-52]]
# [[Citadel 21-53]]
# [[Citadel 21-54]]
# [[Citadel 21-55]]
# [[Citadel 22-71]]
# [[Citadel 22-76]]
# [[Citadel 22-77]]
# [[Citadel 22-78]]
# [[Citadel 22-79]]
# [[Citadel 22-80]]
# [[Citadel 22-81]]
# [[Citadel 22-82]]
# [[Citadel 22-83]]
# [[Citadel 22-84]]
# [[Citadel 22-85]]
# [[Citadel 22-86]]
# [[Citadel 22-87]]
# [[Citadel 22-88]]
# [[Citadel 22-89]]
# [[Citadel 22-90]]
# [[Citadel 22-91]]
# [[Citadel 22-92]]
# [[Citadel 22-93]]
# [[Citadel 22-94]]
# [[Citadel 23-17]]
# [[Citadel 23-18]]
# [[Citadel 23-19]]
# [[Citadel 23-20]]
# [[Citadel 23-21]]
# [[Citadel 23-22]]
# [[Citadel 23-24]]
# [[Citadel 23-25]]
# [[Citadel 23-26]]
# [[Citadel 23-27]]
# [[Citadel 23-28]]
# [[Citadel 23-29]]
# [[Citadel 23-30]]
# [[Citadel 23-31]]
# [[Citadel 23-32]]
# [[Citadel 27-05]]
# [[Citadel 27-06]]
# [[Citadel 27-09]]
# [[Citadel 27-19]]
# [[Citadel 27-20]]
# [[Citadel 27-35]]
# [[Citadel 27-36]]
# [[Citadel 29-10]]
# [[Citadel 29-11]]
# [[Citadel 29-12]]
# [[Citadel 29-13]]
# [[Citadel 29-14]]
# [[Citadel 29-15]]
# [[Citadel 29-16]]
# [[Citadel 29-17]]
# [[Citadel 29-18]]
# [[Citadel 29-19]]
# [[Citadel 29-20]]
# [[Citadel 29-21]]
# [[Citadel 29-22]]
# [[Citadel 29-23]]
# [[Citadel 29-24]]
# [[Citadel 29-25]]
# [[Citadel 29-26]]
# [[Citadel 29-27]]
# [[Citadel 29-28]]
# [[Citadel 29-29]]
# [[Citadel 29-30]]
# [[Citadel 29-31]]
# [[Citadel 29-32]]
# [[Citadel 29-33]]
# [[Citadel 29-34]]
# [[Citadel 29-35]]
# [[Citadel 29-36]]
# [[Citadel 29-37]]
# [[Citadel 29-38]]
# [[Citadel 29-39]]
# [[Citadel 29-40]]
# [[Citadel 29-41]]
# [[Citadel 29-42]]
# [[Citadel 29-43]]
# [[Citadel 9001]]
# [[Citadel 9002]]
# [[Citadel 9003]]
# [[Citadel 9004]]
# [[Citadel 9005]]
# [[Citadel 9006]]
# [[Citadel 9007]]
# [[Citadel 9008]]
# [[Citadel 9009]]
# [[Citadel 9010]]
# [[Citadel 9011]]
# [[Citadel 9012]]
# [[Citadel 9013]]
# [[Citadel 9014]]
# [[Citadel 9015]]
# [[Citadel 9016]]
# [[Citadel 9017]]
# [[Citadel 9018]]
# [[Citadel 9019]]
# [[Citadel 9020]]
# [[Citadel 9021]]
# [[Citadel 9022]]
# [[Citadel 9023]]
# [[Citadel 9024]]
# [[Citadel 9025]]
# [[Citadel 9026]]
# [[Citadel 9027]]
# [[Citadel 9028]]
# [[Citadel 9029]]
# [[Citadel 9030]]
# [[Citadel 9031]]
# [[Citadel 9032]]
# [[Citadel 9033]]
# [[Citadel 9034]]
# [[Citadel 9035]]
# [[Citadel 9036]]
# [[Citadel 9037]]
# [[Citadel 9038]]
# [[Citadel 9039]]
# [[Citadel 9040]]
# [[Citadel 9041]]
# [[Citadel 9042]]
# [[Citadel 9043]]
# [[Citadel 9044]]
# [[Citadel 9045]]
# [[Citadel 9046]]
# [[Citadel 9047]]
# [[Citadel 9048]]
# [[Citadel 9049]]
# [[Citadel 9050]]
# [[Citadel 9051]]
# [[Citadel 9052]]
# [[Citadel 9053]]
# [[Citadel 9054]]
# [[Citadel 9055]]
# [[Citadel 9056]]
# [[Citadel 9057]]
# [[Citadel 9058]]
# [[Citadel 9059]]
# [[Citadel 9060]]
# [[Citadel 9061]]
# [[Citadel 9062]]
# [[Citadel 9063]]
# [[Citadel 9064]]
# [[Citadel 9065]]
# [[Citadel 9066]]
# [[Citadel 9067]]
# [[Citadel 9068]]
# [[Citadel 9069]]
# [[Citadel 9070]]
# [[Citadel 9071]]
# [[Citadel 9072]]
# [[Citadel 9073]]
# [[Citadel 9074]]
# [[Citadel 9075]]
# [[Citadel 9076]]
# [[Citadel 9077]]
# [[Citadel 9078]]
# [[Citadel 9079]]
# [[Citadel 9080]]
# [[Citadel 9081]]
# [[Citadel 9082]]
# [[Citadel 9083]]
# [[Citadel 9084]]
# [[Citadel 9085]]
# [[Citadel 9086]]
# [[Citadel 9087]]
# [[Citadel 9088]]
# [[Citadel 9089]]
# [[Citadel 9090]]
# [[Citadel 9091]]
# [[Citadel 9092]]
# [[Citadel 9093]]
# [[Citadel 9094]]
# [[Citadel 9095]]
# [[Citadel 9096]]
# [[Citadel 9097]]
# [[Citadel 9098]]
# [[Citadel 9099]]
# [[Citadel 9100]]
# [[Citadel 9101]]
# [[Citadel 9102]]
# [[Citadel 9103]]
# [[Citadel 9104]]
# [[Citadel 9117]]
# [[Citadel 9118]]
# [[Citadel 9119]]
# [[Citadel 9120]]
# [[Citadel 9121]]
# [[Citadel 9122]]
# [[Citadel 9123]]
# [[Citadel 9124]]
# [[Citadel 9125]]
# [[Citadel 9126]]
# [[Citadel 9127]]
# [[Citadel 9128]]
# [[Citadel 9129]]
# [[Citadel 9130]]
# [[Citadel 9131]]
# [[Citadel 9132]]
# [[Citadel 9143]]
# [[Citadel 9144]]
# [[Citadel 9145]]
# [[Citadel 9147]]
# [[Citadel 9148]]
# [[Citadel 9149]]
# [[Citadel 9150]]
# [[Citadel 9151]]
# [[Citadel 9152]]
# [[Citadel 9153]]
# [[Citadel 9154]]
# [[Citadel 9155]]
# [[Citadel 9156]]
# [[Citadel 9157]]
# [[Citadel 9158]]
# [[Citadel 9159]]
# [[Citadel 9160]]
# [[Citadel Paints]]
# [[Citadel Paints.tid]]
# [[Citadel]]
# [[Cities on Mars]]
# [[Claymore Castings]]
# [[Code for making an iframe in Reader mode.]]
# [[Cold War Commander]]
# [[Cold War Commander:Forces]]
# [[Cold War Commander:Scenarios]]
# [[Colonel Ian O’Reilly]]
# [[Color Names Sorted by Color Groups]]
# [[Company A/1st East Riding Yeomanry]]
# [[Constable Maitland]]
# [[Contemporaneous Notes]]
# [[Contrast Paints as Wargames Foundry Base Colors]]
# [[Contrast:Snakebite Leather]]
# [[Core Skill Plan]]
# [[Dark Eldar Corsair Class Escort]]
# [[Dark Eldar Pirates Fleet]]
# [[Darklining Wash]]
# [[DDG Coontz (USA)]]
# [[Deep Space Transport]]
# [[Doctor Tabletop]]
# [[Dominix - Drone Ranged]]
# [[Dominix]]
# [[Down with the Empire]]
# [[DropToppers]]
# [[Eating like a diabetic]]
# [[Edward Rutledge III]]
# [[Eldar Aconite Class Frigate]]
# [[Eldar Corsairs Fleet]]
# [[Eldar Dragonship Class]]
# [[Eldar Dragonship.information]]
# [[Eldar Eclipse Class Cruiser]]
# [[Eldar Fleets: Ship Classes]]
# [[Eldar Ghostships]]
# [[Eldar Hellebore Class Frigate]]
# [[Eldar Hemlock Class Destroyer.information]]
# [[Eldar Nightshade Class Destroyer]]
# [[Eldar Shadow Class Cruiser]]
# [[Eldar Shadowhunter Class Escort]]
# [[Eldar Void Stalker Class Battleship]]
# [[Eldar Wraithship Class.information]]
# [[Eldar Wraithship Class]]
# [[Eldar Wraithship.information]]
# [[Embrace the Suck]]
# [[Equipment]]
# [[Ethereum]]
# [[Eve Online]]
# [[Eve:Armor Tanking Skill Plan]]
# [[Eve:Armor]]
# [[Eve:Basic Skill Plan]]
# [[Eve:Battleship Skill Plan]]
# [[Eve:Character]]
# [[Eve:Corporation Management]]
# [[Eve:Drones]]
# [[Eve:Electronic Systems]]
# [[Eve:Engineering]]
# [[Eve:Exploration Skill Plan]]
# [[Eve:Fleet Support]]
# [[Eve:Gunnery]]
# [[Eve:Information]]
# [[Eve:Manufacturing Skill Plan]]
# [[Eve:Missiles]]
# [[Eve:Navigation]]
# [[Eve:Orca Skill Plan]]
# [[Eve:Planet Management]]
# [[Eve:Planetary Interaction Skill Plan]]
# [[Eve:Plans]]
# [[Eve:Production]]
# [[Eve:Reprocessing Skill Plan]]
# [[Eve:Resource Processing]]
# [[Eve:Salvaging Skill Plan]]
# [[Eve:Scanning]]
# [[Eve:Science]]
# [[Eve:Shield Tanking Skill Plan]]
# [[Eve:Shields]]
# [[Eve:Ship Fitting]]
# [[Eve:Skill Plan]]
# [[Eve:Social]]
# [[Eve:Targeting]]
# [[Eve:Trade Skill Plan]]
# [[Eve:Trade]]
# [[EVEMon]]
# [[EVE-O Preview]]
# [[ExternalImages]]
# [[Favorites Plugin]]
# [[Filter With Two Tags]]
# [[Flashlight Tower]]
# [[Float Box - Centre]]
# [[Float Box - Left]]
# [[Float Box - Right]]
# [[Floating Images HowTo]]
# [[floating-image-macros]]
# [[Forces of the Battle of Arras]]
# [[French Equipment of the Battle of Arras]]
# [[French Forces of the Battle of Arras]]
# [[Generic Metal Coins for Boardgames]]
# [[Georgia Urology]]
# [[German Forces of the Battle of Arras]]
# [[German Painting Guide For Early War - 30th September 2020]]
# [[Gothic Sector Chaos Incursion Fleet]]
# [[Gothic Sector Eldar Corsairs Fleet]]
# [[Governor Class Grand Cruiser]]
# [[Great Plugins for TiddlyWiki - 1st October 2020]]
# [[Green Tea Leaves as Flocking]]
# [[Grenouille Expedition Returns]]
# [[Hail Caesar - OCR rulebook and army lists]]
# [[Hail Caesar.image.icon]]
# [[Hail Caesar]]
# [[HB2]]
# [[Healthcare]]
# [[Highlands Miniatures]]
# [[Hobby]]
# [[Hobby:Modelling]]
# [[Hobby:Reading]]
# [[Hobby:Terrain]]
# [[Hollow Earth Expedition]]
# [[How to add a new tab to the sidebar]]
# [[How to Import Multiple PDF files]]
# [[How to preview STL in Windows 10 Preview]]
# [[How to Transclude a Tiddler Icon as an Image]]
# [[How to transclude tiddlers in popup windows]]
# [[Howard Hues Paints]]
# [[icon.completed]]
# [[icon.finish]]
# [[icon.notstarted]]
# [[icon.started]]
# [[icon.working]]
# [[iFrame]]
# [[Imperial Apocalypse Class Battleship]]
# [[Imperial Armageddon Class Battlecruiser]]
# [[Imperial Cargo Freighter]]
# [[Imperial Dauntless Class Light Cruiser]]
# [[Imperial Emperor Class Battleship]]
# [[Imperial Falchion Frigate]]
# [[Imperial Forces in Sands of Sudan]]
# [[Imperial Gas Freighter Cargo Ship]]
# [[Imperial Lunar Class Cruiser]]
# [[Imperial Mars Class Battlecruiser]]
# [[Imperial Nemesis Class Battleship]]
# [[Imperial Nova Frigate Class]]
# [[Imperial Oberon Class Battleship]]
# [[Imperial Ship Class]]
# [[Imperial Tyrant Class Cruiser]]
# [[Incomplete]]
# [[Indian Army Khaki Drill Uniform]]
# [[Infidel-class]]
# [[Inflexible-class]]
# [[Intel Hades Canyon NUC]]
# [[Intel NUC 9 Extreme Kit (Ghost Canyon) BXNUC9i9QNX1]]
# [[Invincible-class]]
# [[Ironclad-class]]
# [[Iyanden Fleet List]]
# [[Jackal-class]]
# [[Jericho-class]]
# [[Journal]]
# [[Jovian-class]]
# [[Kass'l (Orca)-class]]
# [[Kass'l-class]]
# [[Kat Berlin]]
# [[Kevin Dallimore]]
# [[Khopesh-class]]
# [[Kir'la (Warden)-class]]
# [[Kir'la-class]]
# [[Kir'qath (Defender)-class]]
# [[Kir'Qath-class]]
# [[Kir'shasvre (Castellan)-class]]
# [[Kir'shasvre-class]]
# [[Kraken-class]]
# [[Kroot Warsphere]]
# [[Lar'shi (Hero)-class]]
# [[Lar'shi'vre (Protector)-class]]
# [[Late War Turks]]
# [[LazyLoading]]
# [[Leftbar]]
# [[Leo R Pierpont]]
# [[Les' Wash Recipe]]
# [[Lichen Trees]]
# [[Lionel B. Tyler]]
# [[Lord Charles Jarvis]]
# [[Lunar-class]]
# [[Madox Historical Miniatures]]
# [[Maelstrom-class]]
# [[Magic Wash]]
# [[Mahdist Reaction Card Deck]]
# [[Mahdist Smock]]
# [[Mahdist Wash - 29th September 2020]]
# [[Majestic-class]]
# [[Making Leaves from Tea Leaves]]
# [[MarkdownExample]]
# [[Mars-class]]
# [[Mean Streets]]
# [[Mean Streets:Alleys, Asphalt]]
# [[Mean Streets:Alleys, Brick 01]]
# [[Mean Streets:Alleys, Concrete]]
# [[Mean Streets:Alleys, Paving Stone]]
# [[Mean Streets:Block Section 01 Diamond Ace]]
# [[Mean Streets:Block Section 02 Anastasios]]
# [[Mean Streets:Block Section 03 Biograph]]
# [[Mean Streets:Block Section 04 Burlesque]]
# [[Mean Streets:Block Section 05 Acme Warehouse]]
# [[Mean Streets:Block Section 06 Police Fire]]
# [[Mean Streets:Block Section 07 Fishmarket]]
# [[Mean Streets:Block Section 09 Warehouses]]
# [[Mean Streets:Block Section 10 O'Banions]]
# [[Mean Streets:Block Section 12 Leganos And Mission]]
# [[Mean Streets:Block Section 13 Central Park]]
# [[Mean Streets:Block Section 14 Court House]]
# [[Mean Streets:Block Section 15 First National Bank]]
# [[Mean Streets:Block Section 16 Hotel Metropole]]
# [[Mean Streets:Block Section 17 Chintown 1 Jewish 1]]
# [[Mean Streets:Block Section 18 Chinatown 2 Jewish 2]]
# [[Mean Streets:Block Section 19 Chinatown 3 & Cotton Club]]
# [[Mean Streets:Block Section 21 Tenement 1]]
# [[Mean Streets:Block Section 22 Tenement 2]]
# [[Mean Streets:Block Section 23 Tenement 3]]
# [[Mean Streets:Block Section 24 Light Industry]]
# [[Mean Streets:Block Section 25 Hawthorne Inn]]
# [[Mean Streets:Block Section 27 The Clarion Building]]
# [[Mean Streets:Block Section 28 Kit Kat Dullards]]
# [[Mean Streets:Block Section 29 The Wharf]]
# [[Mean Streets:Block Section 30 Uranium Steamship Warehouse]]
# [[Mean Streets:Block Section 31 Stromberg World Wide Freight Warehouse]]
# [[Mean Streets:Decorative Sidewalks Set]]
# [[Mean Streets:Ethnic Posters Set]]
# [[Mean Streets:Mean Streets Plans, Schematics, & Directory]]
# [[Mean Streets:Old Concrete Sidewalk Set]]
# [[Mean Streets:Posters 20s]]
# [[Mean Streets:Posters 30s A4]]
# [[Mean Streets:Posters 30s]]
# [[Mean Streets:Posters Generic]]
# [[Mean Streets:Rooftop Sheds Tanks Billboards]]
# [[Mean Streets:So You Want To Add a Flag Pole]]
# [[Mean Streets:Step by step directions on building the Gaiety Burlesque v2]]
# [[Mean Streets:Streets Asphalt Set]]
# [[Mean Streets:Streets Cobblestone Set]]
# [[Mean Streets:Streets Old Concrete Set]]
# [[Mean Streets:Tracks on Brick Set]]
# [[Mean Streets:Tracks on Concrete Set]]
# [[Medium Nubian Skin]]
# [[Merchant-class]]
# [[Mercury-class]]
# [[Meritech Shrike-class]]
# [[MetroDerm, P.C.]]
# [[MetroDerm]]
# [[Military ATVs]]
# [[Military Symbols]]
# [[Mini Moke]]
# [[Miniature Painting]]
# [[Miniature Painting:Paint Colors]]
# [[Miniatures Basing]]
# [[Miniatures]]
# [[Miniatures:Manufacturer]]
# [[Modern Spearhead]]
# [[Monster Fight Club]]
# [[Mortis Rex-class]]
# [[Moto X]]
# [[Mounting Ship Models]]
# [[MSA 200 C-B]]
# [[Multi level recursive TOC]]
# [[Murder-class]]
# [[Mutton Chop BEF Vickers Team (BEF8).]]
# [[Naiad-class]]
# [[NATO - Armor Light - Division.icon]]
# [[NATO - Artillery - Regiment.icon]]
# [[NATO Symbol]]
# [[Necron Cartouche-class Light Cruiser]]
# [[Necron Dirge-class Raider]]
# [[Necron Harvest Fleet]]
# [[Necron Jackal-class Raider]]
# [[Necron Khopesh-class Light Cruiser]]
# [[Necron Scythe-class Harvest Ship]]
# [[Necron Scythe-class Reaper Ship]]
# [[Necron Shroud-class Light Cruiser]]
# [[Nemesis-class]]
# [[Neptune P]]
# [[NetDrive3]]
# [[Nicassar Dhow]]
# [[Nightshade-class]]
# [[Notebook]]
# [[Notifications]]
# [[Nova-class]]
# [[Oberon-class]]
# [[Odysseus-class]]
# [[Old Fashioned Easy Apple Crisp]]
# [[Old-Fashioned Apple Dumplings]]
# [[Olympia-class]]
# [[One man and his brushes]]
# [[One Page Rules]]
# [[One Player 'zine Adventures- 2nd October 2020]]
# [[Onyx BOOX Max3]]
# [[Orca Build Plan]]
# [[Orca Fit.tid]]
# [[Or'es El'leath (Custodian)-class]]
# [[Ork Basha Light Cruiser]]
# [[Ork Basha]]
# [[Ork Brute Ram Ship]]
# [[Ork Fleet]]
# [[Ork Fleets]]
# [[Ork Fleets: Ship Class]]
# [[Ork Grunt Assault Ship]]
# [[Ork Hammer-class Battlekroozer]]
# [[Ork Kill Kroozer]]
# [[Ork Lite Kroozer]]
# [[Ork Onslaught Attack Ship]]
# [[Ork Pirates of the Cyclops Cluster Fleet]]
# [[Ork Pirates Ship Class]]
# [[Ork Pirates]]
# [[Ork Ravager Attack Ship]]
# [[Ork Savage Gunship]]
# [[Ork Ship Class]]
# [[Ork Terror Kroozer]]
# [[Ork Terror Ship]]
# [[Ork Waaagh! Fleet]]
# [[Orphans]]
# [[Other Counters]]
# [[Over Open Sights - Website Scrape]]
# [[Overlord-class]]
# [[Pacific War: The Struggle Against Japan, 1941-1945]]
# [[Page and tiddler layout customisation.tid]]
# [[Paint all the Minis]]
# [[Paint buy list for Wargames Foundry]]
# [[Paint Conversions]]
# [[Painting Guide]]
# [[Painting]]
# [[Paints to buy]]
# [[Panzer Leader]]
# [[Parchment 'n Lead]]
# [[Pax Espania 1936]]
# [[Pendraken Miniatures]]
# [[Pendraken]]
# [[Perry Miniatures - Black Watch]]
# [[Perry Miniatures Sudan Gordon Highlanders]]
# [[Perry Miniatures Sudan Naval Brigade Gatling Gun and crew]]
# [[Perry Sudan Black Watch]]
# [[Personal Interests]]
# [[Personal Stylesheet]]
# [[Personal:Computing]]
# [[Personal:Journal]]
# [[Personal:Philosophy]]
# [[Personal:Reading]]
# [[Personal:Software]]
# [[Pestilaan-class]]
# [[Piet Wolfgang]]
# [[Pieter-Michiel Wolfgang]]
# [[Pike & Shotte]]
# [[Pill Bottle Bottom End Piece for Painting Handle]]
# [[Planetary Management Skill Plan]]
# [[Plugins for my Wiki]]
# [[Plugins]]
# [[Porpoise - Neptune]]
# [[Porpoise - PvE Fleet Support]]
# [[Post It Note Case]]
# [[Print n Play Games]]
# [[Production Skill Plan]]
# [[Punchlist]]
# [[Pz II Contrast Paint Base - 29th September 2020]]
# [[Ramilies-class]]
# [[Razorfiend-class]]
# [[ReadyGrass Mat 50x100]]
# [[Recent]]
# [[Recreational Vehicles]]
# [[ReMarkable Syntax Sheet.tid]]
# [[Repulsive-class]]
# [[Resource Harvesting Skill Plan]]
# [[Resource Processing Skill Plan]]
# [[Retaliator-class]]
# [[Retribution-class]]
# [[Rogue Traders]]
# [[Rokh Railgun]]
# [[Rokh SmartBomber]]
# [[Role Playing Games]]
# [[Rouge Trader Brigantine]]
# [[Rulerball]]
# [[Sacrilege]]
# [[Samsung Galaxy S20 5G with Fi]]
# [[Sands of Sudan]]
# [[Sands of Sudan: Imperial Forces]]
# [[Scapula-class]]
# [[Scary Biscuts]]
# [[Sceptre-class]]
# [[Science Skill Plan]]
# [[Scrap Metal and Energy Pulse Skill Plan]]
# [[Scythe-class]]
# [[Search for Parenthesis in File Explorer]]
# [[Sebastian St.Cyr]]
# [[Segmentum Obscurus, Gothic Sector Fleet]]
# [[Segmentum Solar, Armageddon Sector Fleet List]]
# [[Selective TOC with Icons Code]]
# [[Shade and Highlight Matilda II - 29th September 2020]]
# [[Shadow-class]]
# [[Shadowhunter-class]]
# [[Ship Names]]
# [[Shipwreck]]
# [[Shroud-class]]
# [[Sigil-class]]
# [[Siluria-class]]
# [[Sir Henry Lovejoy]]
# [[Sir Richard Burton]]
# [[Skether'qan (Messenger)-class]]
# [[Skether'qan-class]]
# [[Slaughter-class]]
# [[Smartbombing Fit]]
# [[Solaris-class]]
# [[Solo]]
# [[Soulcage-class]]
# [[Space 1889]]
# [[Space 1889:Character]]
# [[Space Marine Fleets]]
# [[Spearhead]]
# [[Spectre-class]]
# [[SS Totenkopf Division]]
# [[Stack On]]
# [[Stalwart-class]]
# [[Stronghold-class]]
# [[Struggle of Empires]]
# [[Styx-class]]
# [[Sudan Gordon Highlanders]]
# [[Sudan Mounted Colonels]]
# [[Superior Print on Demand]]
# [[Surface Battle Group]]
# [[Sword-class]]
# [[Syrtis Major: The Residency]]
# [[Tabletop Games]]
# [[Tabletop Games:Blitzkrieg Commander]]
# [[Tactical GameX]]
# [[Talon Cyriix-class]]
# [[Tamiya Fine Surface Primer - White]]
# [[Tarask-class]]
# [[Tarot for Two Players]]
# [[Tau Bastion-class Commerce Vessel]]
# [[Tau Commerce Protection Fleet]]
# [[Tau Fleet]]
# [[Tau Fleets]]
# [[Tau Gal'leath (Explorer)-class Starship]]
# [[Tau Il'Emaar (Courier)-class Merchant Transport]]
# [[Tau Il'Fannor (Merchant)-class Cruiser]]
# [[Tau Il'fannor (Merchant)-class Starship]]
# [[Tau Il'porrui (Emissary)-class Cruiser]]
# [[Tau Kass'l (Orca)-class Gunship]]
# [[Tau Kass'l-class Gunship]]
# [[Tau Kir'la (Warden)-class Carrier Escort]]
# [[Tau Kir'la-class Carrier Escort]]
# [[Tau Kir'qath (Defender)-class Starship]]
# [[Tau Kir'Qath-class Starship]]
# [[Tau Kir'shasvre (Castellan)-class Heavy Escort]]
# [[Tau Kir'shasvre-class Escort]]
# [[Tau Kor’Or’Vesh Fleet]]
# [[Tau Kor’vattra Fleet]]
# [[Tau Lar'Shi (Hero)-class Cruiser]]
# [[Tau Lar'shi (Hero)-class Starship]]
# [[Tau Lar'shi'vre (Protector)-class Cruiser]]
# [[Tau Or'es El'leath (Custodian)-class Carrier]]
# [[Tau Ship Class]]
# [[Tau Skether'qan (Messenger)-class Starship]]
# [[Tau Skether'qan-class Starship]]
# [[Tau Stronghold-class Commerce Vessel]]
# [[Tempest-class]]
# [[Terracotta Army]]
# [[Tesujin-class]]
# [[The Battle of Arras - Operations]]
# [[The Battle of Arras]]
# [[The Bradley House]]
# [[The Lazy Forger]]
# [[The Legation Compound at Syrtis Major]]
# [[The Merchant Fleets of Mankind]]
# [[The Nafziger Collection of Napoleonic Orders of Battle]]
# [[The Perfect Captain]]
# [[The Royal Parhooni Telegraph Service]]
# [[The Spice Plantations]]
# [[The Subaltern's Guide]]
# [[Thor-class]]
# [[Thunderbolt-class]]
# [[Tiamat-class]]
# [[Tiddler JSON Blank]]
# [[TiddlyWiki]]
# [[TiddlyWiki:System]]
# [[timeline Macro]]
# [[Tiny Miner]]
# [[To Do List]]
# [[To Tell Someone They’re Wrong, First Tell Them They’re Right]]
# [[Tobias Beer Plugins Library]]
# [[ToC - Left Aligned]]
# [[TOC Plugin]]
# [[TOC Tutorial]]
# [[Torrent-class]]
# [[Torture-class]]
# [[tpl_Basic Unit Format]]
# [[tpl_Unit Force]]
# [[Traits]]
# [[Transclude all tiddlers with tag]]
# [[Transclude into a Table Cell]]
# [[Transclude Tiddlers by Tag]]
# [[Travel Route to Jita]]
# [[Turbulent-class]]
# [[Twilight 2000]]
# [[Twilight Struggle]]
# [[Tyranid Dark Prowler-class Cruiser]]
# [[Tyranid Devourer-class Battle Cruiser]]
# [[Tyranid Escort Drone]]
# [[Tyranid Fleet]]
# [[Tyranid Fleets]]
# [[Tyranid Hive Fleet]]
# [[Tyranid Kraken-class Frigate]]
# [[Tyranid Razorfiend-class Cruiser]]
# [[Tyranid Vanguard Drone Ship]]
# [[Tyranid Void Fiend-class Cruiser]]
# [[Tyranid Void Prowler-class Light Cruiser]]
# [[Tyrant-class]]
# [[Universe-class]]
# [[Using Stylesheets]]
# [[V/402nd AA]]
# [[Vagabond-class]]
# [[Vallejo 70.301]]
# [[Vallejo 70.302]]
# [[Vallejo 70.303]]
# [[Vallejo 70.304]]
# [[Vallejo 70.305]]
# [[Vallejo 70.306]]
# [[Vallejo 70.307]]
# [[Vallejo 70.308]]
# [[Vallejo 70.309]]
# [[Vallejo 70.310]]
# [[Vallejo 70.311]]
# [[Vallejo 70.312]]
# [[Vallejo 70.313]]
# [[Vallejo 70.314]]
# [[Vallejo 70.315]]
# [[Vallejo 70.316]]
# [[Vallejo 70.317]]
# [[Vallejo 70.318]]
# [[Vallejo 70.319]]
# [[Vallejo 70.320]]
# [[Vallejo 70.321]]
# [[Vallejo 70.322]]
# [[Vallejo 70.323]]
# [[Vallejo 70.324]]
# [[Vallejo 70.325]]
# [[Vallejo 70.326]]
# [[Vallejo 70.327]]
# [[Vallejo 70.328]]
# [[Vallejo 70.329]]
# [[Vallejo 70.330]]
# [[Vallejo 70.331]]
# [[Vallejo 70.332]]
# [[Vallejo 70.333]]
# [[Vallejo 70.334]]
# [[Vallejo 70.335]]
# [[Vallejo 70.336]]
# [[Vallejo 70.337]]
# [[Vallejo 70.338]]
# [[Vallejo 70.339]]
# [[Vallejo 70.340]]
# [[Vallejo 70.341]]
# [[Vallejo 70.342]]
# [[Vallejo 70.343]]
# [[Vallejo 70.344]]
# [[Vallejo 70.345]]
# [[Vallejo 70.346]]
# [[Vallejo 70.347]]
# [[Vallejo 70.348]]
# [[Vallejo 70.730]]
# [[Vallejo 70.733]]
# [[Vallejo 70.735]]
# [[Vallejo 70.736]]
# [[Vallejo 70.737]]
# [[Vallejo 70.740]]
# [[Vallejo 70.741]]
# [[Vallejo 70.800]]
# [[Vallejo 70.801]]
# [[Vallejo 70.802]]
# [[Vallejo 70.803]]
# [[Vallejo 70.804]]
# [[Vallejo 70.805]]
# [[Vallejo 70.806]]
# [[Vallejo 70.807]]
# [[Vallejo 70.808]]
# [[Vallejo 70.809]]
# [[Vallejo 70.810]]
# [[Vallejo 70.811]]
# [[Vallejo 70.812]]
# [[Vallejo 70.814]]
# [[Vallejo 70.815]]
# [[Vallejo 70.816]]
# [[Vallejo 70.817]]
# [[Vallejo 70.818]]
# [[Vallejo 70.819]]
# [[Vallejo 70.820]]
# [[Vallejo 70.821]]
# [[Vallejo 70.822]]
# [[Vallejo 70.823]]
# [[Vallejo 70.824]]
# [[Vallejo 70.825]]
# [[Vallejo 70.826]]
# [[Vallejo 70.827]]
# [[Vallejo 70.829]]
# [[Vallejo 70.830]]
# [[Vallejo 70.831]]
# [[Vallejo 70.832]]
# [[Vallejo 70.833]]
# [[Vallejo 70.835]]
# [[Vallejo 70.836]]
# [[Vallejo 70.837]]
# [[Vallejo 70.838]]
# [[Vallejo 70.839]]
# [[Vallejo 70.840]]
# [[Vallejo 70.841]]
# [[Vallejo 70.842]]
# [[Vallejo 70.843]]
# [[Vallejo 70.844]]
# [[Vallejo 70.845]]
# [[Vallejo 70.846]]
# [[Vallejo 70.847]]
# [[Vallejo 70.850]]
# [[Vallejo 70.851]]
# [[Vallejo 70.853]]
# [[Vallejo 70.854]]
# [[Vallejo 70.855]]
# [[Vallejo 70.856]]
# [[Vallejo 70.857]]
# [[Vallejo 70.858]]
# [[Vallejo 70.859]]
# [[Vallejo 70.860]]
# [[Vallejo 70.861]]
# [[Vallejo 70.862]]
# [[Vallejo 70.863]]
# [[Vallejo 70.864]]
# [[Vallejo 70.865]]
# [[Vallejo 70.866]]
# [[Vallejo 70.867]]
# [[Vallejo 70.868]]
# [[Vallejo 70.869]]
# [[Vallejo 70.870]]
# [[Vallejo 70.871]]
# [[Vallejo 70.872]]
# [[Vallejo 70.873]]
# [[Vallejo 70.874]]
# [[Vallejo 70.875]]
# [[Vallejo 70.876]]
# [[Vallejo 70.877]]
# [[Vallejo 70.878]]
# [[Vallejo 70.879]]
# [[Vallejo 70.880]]
# [[Vallejo 70.881]]
# [[Vallejo 70.882]]
# [[Vallejo 70.883]]
# [[Vallejo 70.884]]
# [[Vallejo 70.885]]
# [[Vallejo 70.886]]
# [[Vallejo 70.887]]
# [[Vallejo 70.888]]
# [[Vallejo 70.889]]
# [[Vallejo 70.890]]
# [[Vallejo 70.891]]
# [[Vallejo 70.892]]
# [[Vallejo 70.893]]
# [[Vallejo 70.894]]
# [[Vallejo 70.895]]
# [[Vallejo 70.896]]
# [[Vallejo 70.897]]
# [[Vallejo 70.898]]
# [[Vallejo 70.899]]
# [[Vallejo 70.900]]
# [[Vallejo 70.901]]
# [[Vallejo 70.902]]
# [[Vallejo 70.903]]
# [[Vallejo 70.904]]
# [[Vallejo 70.905]]
# [[Vallejo 70.906]]
# [[Vallejo 70.907]]
# [[Vallejo 70.908]]
# [[Vallejo 70.909]]
# [[Vallejo 70.910]]
# [[Vallejo 70.911]]
# [[Vallejo 70.912]]
# [[Vallejo 70.913]]
# [[Vallejo 70.914]]
# [[Vallejo 70.915]]
# [[Vallejo 70.916]]
# [[Vallejo 70.917]]
# [[Vallejo 70.918]]
# [[Vallejo 70.919]]
# [[Vallejo 70.920]]
# [[Vallejo 70.921]]
# [[Vallejo 70.922]]
# [[Vallejo 70.923]]
# [[Vallejo 70.924]]
# [[Vallejo 70.925]]
# [[Vallejo 70.926]]
# [[Vallejo 70.927]]
# [[Vallejo 70.928]]
# [[Vallejo 70.929]]
# [[Vallejo 70.930]]
# [[Vallejo 70.940]]
# [[Vallejo 70.941]]
# [[Vallejo 70.942]]
# [[Vallejo 70.943]]
# [[Vallejo 70.944]]
# [[Vallejo 70.945]]
# [[Vallejo 70.946]]
# [[Vallejo 70.947]]
# [[Vallejo 70.948]]
# [[Vallejo 70.949]]
# [[Vallejo 70.950]]
# [[Vallejo 70.951]]
# [[Vallejo 70.952]]
# [[Vallejo 70.953]]
# [[Vallejo 70.954]]
# [[Vallejo 70.955]]
# [[Vallejo 70.956]]
# [[Vallejo 70.957]]
# [[Vallejo 70.958]]
# [[Vallejo 70.959]]
# [[Vallejo 70.960]]
# [[Vallejo 70.961]]
# [[Vallejo 70.962]]
# [[Vallejo 70.963]]
# [[Vallejo 70.964]]
# [[Vallejo 70.965]]
# [[Vallejo 70.966]]
# [[Vallejo 70.967]]
# [[Vallejo 70.968]]
# [[Vallejo 70.969]]
# [[Vallejo 70.970]]
# [[Vallejo 70.971]]
# [[Vallejo 70.972]]
# [[Vallejo 70.973]]
# [[Vallejo 70.974]]
# [[Vallejo 70.975]]
# [[Vallejo 70.976]]
# [[Vallejo 70.977]]
# [[Vallejo 70.978]]
# [[Vallejo 70.979]]
# [[Vallejo 70.980]]
# [[Vallejo 70.981]]
# [[Vallejo 70.982]]
# [[Vallejo 70.983]]
# [[Vallejo 70.984]]
# [[Vallejo 70.985]]
# [[Vallejo 70.986]]
# [[Vallejo 70.987]]
# [[Vallejo 70.988]]
# [[Vallejo 70.989]]
# [[Vallejo 70.990]]
# [[Vallejo 70.991]]
# [[Vallejo 70.992]]
# [[Vallejo 70.993]]
# [[Vallejo 70.994]]
# [[Vallejo 70.995]]
# [[Vallejo 70.996]]
# [[Vallejo 70.997]]
# [[Vallejo 70.998]]
# [[Vallejo 70.999]]
# [[Vallejo Model Color Brown Sand]]
# [[Vallejo Paint Colors]]
# [[Vallejo Paint Mixes for British Armour]]
# [[Vallejo Paints - Triads]]
# [[Vallejo Paints]]
# [[Vallejo]]
# [[Valor & Victory]]
# [[Vampire: the Eternal Struggle]]
# [[Vanquisher-class]]
# [[Vengeance-class]]
# [[Venom Blade-class]]
# [[Very Civile Actions]]
# [[Victory-class]]
# [[Vigil-class]]
# [[Viper-class]]
# [[Void Fiend-class]]
# [[Void Prowler-class]]
# [[Vulcan Wolfgang]]
# [[Wakes Emporium]]
# [[Wargames Foundry 001A]]
# [[Wargames Foundry 001B]]
# [[Wargames Foundry 001C]]
# [[Wargames Foundry 002A]]
# [[Wargames Foundry 002B]]
# [[Wargames Foundry 002C]]
# [[Wargames Foundry 003A]]
# [[Wargames Foundry 003B]]
# [[Wargames Foundry 003C]]
# [[Wargames Foundry 004A]]
# [[Wargames Foundry 004B]]
# [[Wargames Foundry 004C]]
# [[Wargames Foundry 005A]]
# [[Wargames Foundry 005B]]
# [[Wargames Foundry 005C]]
# [[Wargames Foundry 006A]]
# [[Wargames Foundry 006B]]
# [[Wargames Foundry 006C]]
# [[Wargames Foundry 007A]]
# [[Wargames Foundry 007B]]
# [[Wargames Foundry 007C]]
# [[Wargames Foundry 008A]]
# [[Wargames Foundry 008B]]
# [[Wargames Foundry 008C]]
# [[Wargames Foundry 009A]]
# [[Wargames Foundry 009B]]
# [[Wargames Foundry 009C]]
# [[Wargames Foundry 010A]]
# [[Wargames Foundry 010B]]
# [[Wargames Foundry 010C]]
# [[Wargames Foundry 011A]]
# [[Wargames Foundry 011B]]
# [[Wargames Foundry 011C]]
# [[Wargames Foundry 012A]]
# [[Wargames Foundry 012B]]
# [[Wargames Foundry 012C]]
# [[Wargames Foundry 013A]]
# [[Wargames Foundry 013B]]
# [[Wargames Foundry 013C]]
# [[Wargames Foundry 014A]]
# [[Wargames Foundry 014B]]
# [[Wargames Foundry 014C]]
# [[Wargames Foundry 015A]]
# [[Wargames Foundry 015B]]
# [[Wargames Foundry 015C]]
# [[Wargames Foundry 016A]]
# [[Wargames Foundry 016B]]
# [[Wargames Foundry 016C]]
# [[Wargames Foundry 017A]]
# [[Wargames Foundry 017B]]
# [[Wargames Foundry 017C]]
# [[Wargames Foundry 018A]]
# [[Wargames Foundry 018B]]
# [[Wargames Foundry 018C]]
# [[Wargames Foundry 019A]]
# [[Wargames Foundry 019B]]
# [[Wargames Foundry 019C]]
# [[Wargames Foundry 020A]]
# [[Wargames Foundry 020B]]
# [[Wargames Foundry 020C]]
# [[Wargames Foundry 021A]]
# [[Wargames Foundry 021B]]
# [[Wargames Foundry 021C]]
# [[Wargames Foundry 022A]]
# [[Wargames Foundry 022B]]
# [[Wargames Foundry 022C]]
# [[Wargames Foundry 023A]]
# [[Wargames Foundry 023B]]
# [[Wargames Foundry 023C]]
# [[Wargames Foundry 024A]]
# [[Wargames Foundry 024B]]
# [[Wargames Foundry 024C]]
# [[Wargames Foundry 025A]]
# [[Wargames Foundry 025B]]
# [[Wargames Foundry 025C]]
# [[Wargames Foundry 026A]]
# [[Wargames Foundry 026B]]
# [[Wargames Foundry 026C]]
# [[Wargames Foundry 027A]]
# [[Wargames Foundry 027B]]
# [[Wargames Foundry 027C]]
# [[Wargames Foundry 028A]]
# [[Wargames Foundry 028B]]
# [[Wargames Foundry 028C]]
# [[Wargames Foundry 029A]]
# [[Wargames Foundry 029B]]
# [[Wargames Foundry 029C]]
# [[Wargames Foundry 030A]]
# [[Wargames Foundry 030B]]
# [[Wargames Foundry 030C]]
# [[Wargames Foundry 031A]]
# [[Wargames Foundry 031B]]
# [[Wargames Foundry 031C]]
# [[Wargames Foundry 032A]]
# [[Wargames Foundry 032B]]
# [[Wargames Foundry 032C]]
# [[Wargames Foundry 033A]]
# [[Wargames Foundry 033B]]
# [[Wargames Foundry 033C]]
# [[Wargames Foundry 034A]]
# [[Wargames Foundry 034B]]
# [[Wargames Foundry 034C]]
# [[Wargames Foundry 035A]]
# [[Wargames Foundry 035B]]
# [[Wargames Foundry 035C]]
# [[Wargames Foundry 036A]]
# [[Wargames Foundry 036B]]
# [[Wargames Foundry 036C]]
# [[Wargames Foundry 037A]]
# [[Wargames Foundry 037B]]
# [[Wargames Foundry 037C]]
# [[Wargames Foundry 038A]]
# [[Wargames Foundry 038B]]
# [[Wargames Foundry 038C]]
# [[Wargames Foundry 039A]]
# [[Wargames Foundry 039B]]
# [[Wargames Foundry 039C]]
# [[Wargames Foundry 040A]]
# [[Wargames Foundry 040B]]
# [[Wargames Foundry 040C]]
# [[Wargames Foundry 041A]]
# [[Wargames Foundry 041B]]
# [[Wargames Foundry 041C]]
# [[Wargames Foundry 042A]]
# [[Wargames Foundry 042B]]
# [[Wargames Foundry 042C]]
# [[Wargames Foundry 043A]]
# [[Wargames Foundry 043B]]
# [[Wargames Foundry 043C]]
# [[Wargames Foundry 044A]]
# [[Wargames Foundry 044B]]
# [[Wargames Foundry 044C]]
# [[Wargames Foundry 045A]]
# [[Wargames Foundry 045B]]
# [[Wargames Foundry 045C]]
# [[Wargames Foundry 046A]]
# [[Wargames Foundry 046B]]
# [[Wargames Foundry 046C]]
# [[Wargames Foundry 047A]]
# [[Wargames Foundry 053A]]
# [[Wargames Foundry 053B]]
# [[Wargames Foundry 053C]]
# [[Wargames Foundry 054A]]
# [[Wargames Foundry 054B]]
# [[Wargames Foundry 054C]]
# [[Wargames Foundry 055A]]
# [[Wargames Foundry 055B]]
# [[Wargames Foundry 055C]]
# [[Wargames Foundry 056A]]
# [[Wargames Foundry 056B]]
# [[Wargames Foundry 056C]]
# [[Wargames Foundry 057A]]
# [[Wargames Foundry 057B]]
# [[Wargames Foundry 057C]]
# [[Wargames Foundry 058A]]
# [[Wargames Foundry 058B]]
# [[Wargames Foundry 058C]]
# [[Wargames Foundry 060A]]
# [[Wargames Foundry 060B]]
# [[Wargames Foundry 060C]]
# [[Wargames Foundry 061A]]
# [[Wargames Foundry 061B]]
# [[Wargames Foundry 061C]]
# [[Wargames Foundry 062A]]
# [[Wargames Foundry 062B]]
# [[Wargames Foundry 062C]]
# [[Wargames Foundry 063A]]
# [[Wargames Foundry 063B]]
# [[Wargames Foundry 063C]]
# [[Wargames Foundry 064A]]
# [[Wargames Foundry 064B]]
# [[Wargames Foundry 064C]]
# [[Wargames Foundry 065A]]
# [[Wargames Foundry 065B]]
# [[Wargames Foundry 065C]]
# [[Wargames Foundry 066A]]
# [[Wargames Foundry 066B]]
# [[Wargames Foundry 066C]]
# [[Wargames Foundry 067A]]
# [[Wargames Foundry 067B]]
# [[Wargames Foundry 067C]]
# [[Wargames Foundry 068A]]
# [[Wargames Foundry 068B]]
# [[Wargames Foundry 068C]]
# [[Wargames Foundry 069A]]
# [[Wargames Foundry 069B]]
# [[Wargames Foundry 069C]]
# [[Wargames Foundry 070A]]
# [[Wargames Foundry 070B]]
# [[Wargames Foundry 070C]]
# [[Wargames Foundry 071A]]
# [[Wargames Foundry 071B]]
# [[Wargames Foundry 071C]]
# [[Wargames Foundry 072A]]
# [[Wargames Foundry 072B]]
# [[Wargames Foundry 072C]]
# [[Wargames Foundry 073A]]
# [[Wargames Foundry 073B]]
# [[Wargames Foundry 073C]]
# [[Wargames Foundry 074A]]
# [[Wargames Foundry 074B]]
# [[Wargames Foundry 074C]]
# [[Wargames Foundry 075A]]
# [[Wargames Foundry 075B]]
# [[Wargames Foundry 075C]]
# [[Wargames Foundry 076A]]
# [[Wargames Foundry 076B]]
# [[Wargames Foundry 076C]]
# [[Wargames Foundry 077A]]
# [[Wargames Foundry 077B]]
# [[Wargames Foundry 077C]]
# [[Wargames Foundry 078A]]
# [[Wargames Foundry 078B]]
# [[Wargames Foundry 078C]]
# [[Wargames Foundry 079A]]
# [[Wargames Foundry 079B]]
# [[Wargames Foundry 079C]]
# [[Wargames Foundry 080A]]
# [[Wargames Foundry 080B]]
# [[Wargames Foundry 080C]]
# [[Wargames Foundry 081A]]
# [[Wargames Foundry 081B]]
# [[Wargames Foundry 081C]]
# [[Wargames Foundry 082A]]
# [[Wargames Foundry 082B]]
# [[Wargames Foundry 082C]]
# [[Wargames Foundry 083A]]
# [[Wargames Foundry 083B]]
# [[Wargames Foundry 083C]]
# [[Wargames Foundry 084A]]
# [[Wargames Foundry 084B]]
# [[Wargames Foundry 084C]]
# [[Wargames Foundry 085A]]
# [[Wargames Foundry 085B]]
# [[Wargames Foundry 085C]]
# [[Wargames Foundry 086A]]
# [[Wargames Foundry 086B]]
# [[Wargames Foundry 086C]]
# [[Wargames Foundry 087A]]
# [[Wargames Foundry 087B]]
# [[Wargames Foundry 087C]]
# [[Wargames Foundry 088A]]
# [[Wargames Foundry 088B]]
# [[Wargames Foundry 088C]]
# [[Wargames Foundry 089A]]
# [[Wargames Foundry 089B]]
# [[Wargames Foundry 089C]]
# [[Wargames Foundry 090A]]
# [[Wargames Foundry 090B]]
# [[Wargames Foundry 090C]]
# [[Wargames Foundry 091A]]
# [[Wargames Foundry 091B]]
# [[Wargames Foundry 091C]]
# [[Wargames Foundry 092A]]
# [[Wargames Foundry 092B]]
# [[Wargames Foundry 092C]]
# [[Wargames Foundry 093A]]
# [[Wargames Foundry 093B]]
# [[Wargames Foundry 093C]]
# [[Wargames Foundry 094A]]
# [[Wargames Foundry 094B]]
# [[Wargames Foundry 094C]]
# [[Wargames Foundry 095A]]
# [[Wargames Foundry 095B]]
# [[Wargames Foundry 095C]]
# [[Wargames Foundry 096A]]
# [[Wargames Foundry 096B]]
# [[Wargames Foundry 096C]]
# [[Wargames Foundry 097A]]
# [[Wargames Foundry 097B]]
# [[Wargames Foundry 097C]]
# [[Wargames Foundry 098A]]
# [[Wargames Foundry 098B]]
# [[Wargames Foundry 098C]]
# [[Wargames Foundry 099A]]
# [[Wargames Foundry 099B]]
# [[Wargames Foundry 099C]]
# [[Wargames Foundry 100A]]
# [[Wargames Foundry 100B]]
# [[Wargames Foundry 100C]]
# [[Wargames Foundry 101A]]
# [[Wargames Foundry 101B]]
# [[Wargames Foundry 101C]]
# [[Wargames Foundry 102A]]
# [[Wargames Foundry 102B]]
# [[Wargames Foundry 102C]]
# [[Wargames Foundry 103A]]
# [[Wargames Foundry 103B]]
# [[Wargames Foundry 103C]]
# [[Wargames Foundry 104A]]
# [[Wargames Foundry 104B]]
# [[Wargames Foundry 104C]]
# [[Wargames Foundry 105A]]
# [[Wargames Foundry 105B]]
# [[Wargames Foundry 105C]]
# [[Wargames Foundry 106A]]
# [[Wargames Foundry 106B]]
# [[Wargames Foundry 106C]]
# [[Wargames Foundry 107A]]
# [[Wargames Foundry 107B]]
# [[Wargames Foundry 107C]]
# [[Wargames Foundry 108A]]
# [[Wargames Foundry 108B]]
# [[Wargames Foundry 108C]]
# [[Wargames Foundry 109A]]
# [[Wargames Foundry 109B]]
# [[Wargames Foundry 109C]]
# [[Wargames Foundry 110A]]
# [[Wargames Foundry 110B]]
# [[Wargames Foundry 110C]]
# [[Wargames Foundry 111A]]
# [[Wargames Foundry 111B]]
# [[Wargames Foundry 111C]]
# [[Wargames Foundry 112A]]
# [[Wargames Foundry 112B]]
# [[Wargames Foundry 112C]]
# [[Wargames Foundry 115A]]
# [[Wargames Foundry 115B]]
# [[Wargames Foundry 115C]]
# [[Wargames Foundry 116A]]
# [[Wargames Foundry 116B]]
# [[Wargames Foundry 116C]]
# [[Wargames Foundry 117A]]
# [[Wargames Foundry 117B]]
# [[Wargames Foundry 117C]]
# [[Wargames Foundry 118A]]
# [[Wargames Foundry 118B]]
# [[Wargames Foundry 118C]]
# [[Wargames Foundry 119A]]
# [[Wargames Foundry 119B]]
# [[Wargames Foundry 119C]]
# [[Wargames Foundry 120A]]
# [[Wargames Foundry 120B]]
# [[Wargames Foundry 120C]]
# [[Wargames Foundry 121A]]
# [[Wargames Foundry 121B]]
# [[Wargames Foundry 121C]]
# [[Wargames Foundry 122A]]
# [[Wargames Foundry 122B]]
# [[Wargames Foundry 122C]]
# [[Wargames Foundry 123A]]
# [[Wargames Foundry 123B]]
# [[Wargames Foundry 123C]]
# [[Wargames Foundry 124A]]
# [[Wargames Foundry 124B]]
# [[Wargames Foundry 124C]]
# [[Wargames Foundry 125A]]
# [[Wargames Foundry 125B]]
# [[Wargames Foundry 125C]]
# [[Wargames Foundry 126A]]
# [[Wargames Foundry 126B]]
# [[Wargames Foundry 126C]]
# [[Wargames Foundry 127A]]
no
Nomen Nescio
$:/themes/tiddlywiki/vanilla/themetweaks
$:/core/ui/ControlPanel/Info
$:/core/ui/ControlPanel/Saving/GitHub
$:/core/ui/SideBar/Tools
no

{
    "tiddlers": {
        "$:/themes/tiddlywiki/snowwhite/base": {
            "title": "$:/themes/tiddlywiki/snowwhite/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
        }
    }
}
{
    "tiddlers": {
        "$:/themes/tiddlywiki/vanilla/themetweaks": {
            "title": "$:/themes/tiddlywiki/vanilla/themetweaks",
            "tags": "$:/tags/ControlPanel/Appearance",
            "caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
            "text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
        },
        "$:/themes/tiddlywiki/vanilla/base": {
            "title": "$:/themes/tiddlywiki/vanilla/base",
            "tags": "[[$:/tags/Stylesheet]]",
            "text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define sidebarbreakpoint()\n<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/>\n\\end\n\n\\define sidebarbreakpoint-minus-one()\n<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\define set-type-selector-min-width()\n<$set name=\"typeLength\" value={{{ [all[shadows+tiddlers]prefix[$:/language/Docs/Types/]get[name]length[]maxall[]] }}}>\n\n\t.tc-type-selector-dropdown-wrapper {\n\t\tmin-width: calc(<<typeLength>>ch + 4em);\n\t}\n\n\t.tc-type-selector-dropdown-wrapper input.tc-edit-typeeditor {\n\t\tmin-width: <<typeLength>>ch;\n\t}\n\n</$set>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\ninput[type=\"search\"] {\n  outline-offset: initial;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tfill: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml, body {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\n<<if-background-attachment \"\"\"\n\nbody.tc-body {\n        background-color: transparent;\n}\n\n\"\"\">>\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n\tfont-size: 2em;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote > div {\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n    border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n    left: -50px;\n    top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n    right: -80px;\n    bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\nbutton, textarea, input, select {\n\toutline-color: <<colour primary>>;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\ninput[type=\"checkbox\"] {\n  vertical-align: middle;\n}\n\ninput[type=\"search\"]::-webkit-search-decoration,\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-results-button,\ninput[type=\"search\"]::-webkit-search-results-decoration {\n\t-webkit-appearance:none;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n::selection {\n\tbackground-color: Highlight;\n\tcolor: HighlightText;\n\tbackground-color: <<colour selection-background>>;\n\tcolor: <<colour selection-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\t/* next 2 elements needed, since normalize 8.0.1 */\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n.tc-drop-down a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\n.tc-links-draggable-list .tc-droppable-placeholder {\n\tline-height: 2em;\n\theight: 2em;\n}\n\n.tc-sidebar-tab-open-item {\n\tposition: relative;\n}\n\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\n\tfont-size: 0.7em;\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tcolor: <<colour foreground>>;\n\tfill: <<colour foreground>>;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tborder-radius: 2px;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-primary-btn {\n \tbackground: <<colour primary>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\n.tc-sidebar-lists button small {\n\tcolor: <<colour foreground>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\n.tc-block-tags-dropdown > .tc-btn-invisible:hover {\n\tbackground-color: <<colour primary>>;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-sidebar-scrollable .tc-tag-label {\n\ttext-shadow: none;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tmargin-right: 3px; \n\tmargin-bottom: 1px;\n\tvertical-align: bottom;\n}\n\n.tc-edit-tags button.tc-remove-tag-button svg {\n\tfont-size: 0.7em;\n\tvertical-align: middle;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n.tc-tag-button-selected,\n.tc-list-item-selected a.tc-tiddlylink, a.tc-list-item-selected {\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour tiddler-background>>;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-topbar-right {\n\t\tright: 10px;\n\t}\n\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-show-sidebar-btn svg.tc-image-chevron-left, .tc-hide-sidebar-btn svg.tc-image-chevron-right {\n\t\ttransform: rotate(-90deg);\n\t}\n\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n  font-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-sidebar-lists .tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\ttransition:  min-height {{$:/config/AnimationDuration}}ms ease-in-out, padding-top {{$:/config/AnimationDuration}}ms ease-in-out, padding-bottom {{$:/config/AnimationDuration}}ms ease-in-out;\n\t}\n\t\n\t<<if-no-sidebar \"\"\"\n\n\t\t.tc-sidebar-header {\n\t\t\tmin-height: 0;\n\t\t\tpadding-top: 0;\n\t\t\tpadding-bottom: 0;\n\t\t}\n\n\t\"\"\">>\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n\t.tc-story-river.tc-static-story-river {\n\t\tmargin-right: 0;\n\t\tpadding-right: 42px;\n\t}\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\n\t.tc-tiddler-info {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: <<sidebarbreakpoint-minus-one>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t\tmargin-bottom: .5em;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.35em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n\tmargin-right: .1em;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-subtitle .tc-tiddlylink {\n\tmargin-right: .3em;\n}\n\n.tc-tiddler-missing .tc-title {\n  font-style: italic;\n  font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n    height: 1.2em;\n    width: 1.2em;\n    margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg  {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-editor-background>>;\n}\n\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tbackground-color: <<colour tiddler-background>>;\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor  {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tcolor: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n  fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n  fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n  fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n  fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n  fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n  fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n  fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n  fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n  fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-type-selector .tc-edit-typeeditor {\n\twidth: auto;\n}\n\n.tc-type-selector-dropdown-wrapper {\n\tdisplay: inline-block;\n}\n\n<<set-type-selector-min-width>>\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n.tc-edit-fields.tc-edit-fields-small {\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n}\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name-wrapper input.tc-edit-texteditor {\n\twidth: auto;\n}\n\n.tc-edit-field-add-name-wrapper {\n\tdisplay: inline-block;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-edit-field-add-value {\n\t\twidth: 35%;\n\t}\n\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-viewswitcher .tc-image-button {\n\tmargin-right: .3em;\n}\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg  {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-drop-down .tc-drop-down-info {\n\tpadding-left: 14px;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n    width: auto;\n    margin-bottom: 0px;\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a.tc-tiddlylink:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n\n/*\n** Centered modals\n*/\n.tc-modal-centered .tc-modal {\n\twidth: auto;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%) !important;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical  {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical  {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical  {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n\toverflow: auto;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n    display: block;\n    width: 100%;\n    text-align: left;\t\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n    flex: 1 0;\n    background: <<colour tiddler-editor-background>>;\n    border-right: 0.5em solid <<colour muted-foreground>>;\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\n    white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n    background: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n    padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n    flex: 3 1;\n    border-left: 0.5em solid <<colour muted-foreground>>;\n    border-right: 0.5em solid <<colour muted-foreground>>;\n    border-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Import table\n*/\n\n.tc-import-table {\n\twidth: 100%;\n}\n\n.tc-import-table svg.tc-image-edit-button {\n\tmax-width: unset;\n}\n\n.tc-import-table th:first-of-type {\n\twidth: 10%;\n}\n\n.tc-import-table th:last-of-type {\n\twidth: 30%;\n}\n\n.tc-import-table .tc-row-disabled {\n\tbackground: <<colour very-muted-foreground>>10;\n\topacity: 0.8;\n}\n\n.tc-import-table .tc-row-warning {\n\tbackground: <<colour diff-delete-background>>50;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 28px;\n\tleft: 0;\n\tright: 0;\n\tmax-width: 50%;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 14px;\n\tpadding: 7px;\n\tborder: 1px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 7px;\n    line-height: 0;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n    font-size: 0.8em;\n    margin-bottom: 0.5em;\n}\n\n.tc-alert-body > p {\n\tmargin: 0;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: <<sidebarbreakpoint>>) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <<colour background>>;\n\tborder-bottom-none;\n\tbackground: <<colour dirty-indicator>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <<colour foreground>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: flex;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tfill: <<colour muted-foreground>>;\n\tbackground-color: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n    align-items: center;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info {\n    margin: 0.5em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugin-indicator {\n\tmargin: -16px 1em 0 2em;\n}\n\n.tc-plugin-info-sub-plugin-indicator button {\n\tcolor: <<colour background>>;\n\tbackground: <<colour foreground>>;\n\tborder-radius: 8px;\n    padding: 2px 7px;\n    font-size: 0.75em;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover > .tc-plugin-info-chunk > svg {\n\tfill: <<colour background>>;\n}\n\n.tc-plugin-info-chunk {\n    margin: 2px;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description {\n\tflex-grow: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n    text-align: right;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\n\tfont-size: 1em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description div {\n\tfont-size: 0.7em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\n\twidth: 2em;\n\theight: 2em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 0 1em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugins {\n\tpadding: 0.5em;\n    margin: 0 1em 1em 1em;\n\tbackground: <<colour notification-background>>;\n}\n\n.tc-install-plugin {\n\tfont-weight: bold;\n\tbackground: green;\n\tcolor: white;\n\tfill: white;\n\tborder-radius: 4px;\n\tpadding: 3px;\n}\n\n.tc-install-plugin.tc-reinstall-downgrade {\n\tbackground: red;\n}\n\n.tc-install-plugin.tc-reinstall {\n\tbackground: blue;\n}\n\n.tc-install-plugin.tc-reinstall-upgrade {\n\tbackground: orange;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n    vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <<colour table-header-background>>;\n\tborder-left: 1px solid <<colour table-header-background>>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <<colour table-header-background>>;\n\tborder-top: 1px solid <<colour table-header-background>>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <<colour table-header-background>>;\n\tborder-color: <<colour table-footer-background>>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\ninput.tc-palette-manager-colour-input {\n\twidth: 100%;\n\tpadding: 0;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n::-webkit-file-upload-button {\n\tcursor:pointer;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <<colour diff-equal-background>>;\n\tcolor: <<colour diff-equal-foreground>>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <<colour diff-insert-background>>;\n\tcolor: <<colour diff-insert-foreground>>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <<colour diff-delete-background>>;\n\tcolor: <<colour diff-delete-foreground>>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <<colour diff-invisible-background>>;\n\tcolor: <<colour diff-invisible-foreground>>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <<colour background>>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n    margin: 0;\n    padding: 0;\n    border: none;\n    background: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n    \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n    \tlist-style-type: none;\n    \tpadding-left: 0;\n    \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n    \tpadding-left: 1em;    \n}\n\n.tc-tree button { \n    \tcolor: #acacac;\n}\n\n.tc-tree svg {\n     \tfill: #acacac;\n}\n\n.tc-tree span svg {\n    \twidth: 1em;\n    \theight: 1em;\n    \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n    \tcolor: lightgray;\n}\n\nselect {\n        color: <<colour select-tag-foreground>>;\n        background: <<colour select-tag-background>>;\n}\n\n/*\n** Utility classes for SVG icons\n*/\n\n.tc-fill-background {\n\tfill: <<colour background>>;\n}\n\n/*\n** Flexbox utility classes\n*/\n\n.tc-flex {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-flex-column {\n\tflex-direction: column;\n}\n\n.tc-flex-row {\n\tflex-direction: row;\n}\n\n.tc-flex-grow-1 {\n\tflex-grow: 1;\n}\n\n.tc-flex-grow-2 {\n\tflex-grow: 2;\n}\n\n/*\n** Other utility classes\n*/\n\n.tc-small-gap {\n\tmargin-left: .5em;\n\tmargin-right: .5em;\n}\n\n.tc-small-gap-left {\n\tmargin-left: .5em;\n}\n\n.tc-small-gap-right {\n\tmargin-right: .5em;\n}\n\n.tc-big-gap {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-big-gap-left {\n\tmargin-left: 1em;\n}\n\n.tc-big-gap-right {\n\tmargin-right: 1em;\n}\n\n.tc-word-break {\n\tword-break: break-all;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
            "text": "15px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
            "text": "22px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
            "text": "14px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
            "text": "20px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storytop": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
            "text": "0px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storyright": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
            "text": "770px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
            "text": "686px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
            "text": "960px"
        },
        "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
            "title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
            "text": "350px"
        },
        "$:/themes/tiddlywiki/vanilla/options/stickytitles": {
            "title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
            "text": "no"
        },
        "$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
            "title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
            "text": "fixed-fluid"
        },
        "$:/themes/tiddlywiki/vanilla/options/codewrapping": {
            "title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
            "text": "pre-wrap"
        },
        "$:/themes/tiddlywiki/vanilla/reset": {
            "title": "$:/themes/tiddlywiki/vanilla/reset",
            "type": "text/plain",
            "text": "/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */\n\n/*\nDocument\n========\n*/\n\n/**\nUse a better box model (opinionated).\n*/\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box;\n}\n\n/**\nUse a more readable tab size (opinionated).\n*/\n\n:root {\n  -moz-tab-size: 4;\n  tab-size: 4;\n}\n\n/**\n1. Correct the line height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n*/\n\nhtml {\n  line-height: 1.15; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/*\nSections\n========\n*/\n\n/**\nRemove the margin in all browsers.\n*/\n\nbody {\n  margin: 0;\n}\n\n/**\nImprove consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n*/\n\nbody {\n  font-family:\n    system-ui,\n    -apple-system, /* Firefox supports this but not yet `system-ui` */\n    'Segoe UI',\n    Roboto,\n    Helvetica,\n    Arial,\n    sans-serif,\n    'Apple Color Emoji',\n    'Segoe UI Emoji';\n}\n\n/*\nGrouping content\n================\n*/\n\n/**\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n*/\n\nhr {\n  height: 0; /* 1 */\n  color: inherit; /* 2 */\n}\n\n/*\nText-level semantics\n====================\n*/\n\n/**\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr[title] {\n  text-decoration: underline dotted;\n}\n\n/**\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n1. Improve consistency of default fonts in all browsers. (https://github.com/sindresorhus/modern-normalize/issues/3)\n2. Correct the odd 'em' font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family:\n    ui-monospace,\n    SFMono-Regular,\n    Consolas,\n    'Liberation Mono',\n    Menlo,\n    monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/**\nPrevent 'sub' and 'sup' elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\nTabular data\n============\n*/\n\n/**\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n*/\n\ntable {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n}\n\n/*\nForms\n=====\n*/\n\n/**\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\nRemove the inheritance of text transform in Edge and Firefox.\n1. Remove the inheritance of text transform in Firefox.\n*/\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\nCorrect the inability to style clickable types in iOS and Safari.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button;\n}\n\n/**\nRemove the inner border and padding in Firefox.\n*/\n\n::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\nRestore the focus styles unset by the previous rule.\n*/\n\n:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\nRemove the additional ':invalid' styles in Firefox.\nSee: https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/**\nRemove the padding so developers are not caught out when they zero out 'fieldset' elements in all browsers.\n*/\n\nlegend {\n  padding: 0;\n}\n\n/**\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/**\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to 'inherit' in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/*\nInteractive\n===========\n*/\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n"
        },
        "$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
            "text": "system-ui, -apple-system, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\""
        },
        "$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
            "text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
            "text": "fixed"
        },
        "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
            "title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
            "text": "auto"
        },
        "$:/themes/tiddlywiki/vanilla/sticky": {
            "title": "$:/themes/tiddlywiki/vanilla/sticky",
            "text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\n}\n`\n</$list>\n</$reveal>\n"
        }
    }
}
fluid-fixed
[img[10mm Miniature Basing Ideas.image]]
<div style="clear: both;"></div><<image-left "10mm Early War German - Black Green Ink.20200930" caption:"10mm Early War German - Black Green Ink"  width:"400px">>

Here I added some Vallejo 72090 Black Green ink to the mix and it made the figures way too green. Not recommended at all. Maybe an ink wash and then a drybrush of the base color and then the highlight Field Grey?


<div style="clear: both;">

---
<div style="clear: both;"></div><<image-left "10mm Early War German - Contrast.20200930" caption:"10mm Early War German - Contrast"  width:"400px">>

This was my first try for a uniform color. Just straight Contrast which I thing will miss the uniform color that I was looking for. Also the 'contrast' effect was muted and not worth the cost of the paint.


<div style="clear: both;">

---
<div style="clear: both;"></div><<image-left "10mm Early War German - Contrast Medium.20200930" caption:"10mm Early War German - Contrast Medium"  width:"400px">>

Here I used the appropriate [[AK3141 Field Grey Base]] and some [[Contrast Medium]] at a 2:1 ratio. I think that this gave a good 'contrast' effect and with a drybrush of the light color it may be the preferred method.


<div style="clear: both;">

---
<div style="clear: both;"></div><<image-left "10mm Early War German - Future.20200930" caption:"10mm Early War German - Future"  width:"400px">>

So far my best choice has been a 4:1 ratio of the [[AK3141 Field Grey Base]] and Future Wash. The Future Wash broke down the base color and kept the color and was easy to apply. So for the fastest and easiest way to do this, this is the choice.


<div style="clear: both;">

---
Woke up this morning with Karlene we spend some time talking to each other I think we both understand that we love each other very much and that whatever concerns we have are more related to our personal baggage and not anything we're doing to each other.

Spend some time this morning printing out the form or caps for my pill bottles to paint my soldiers.

Also decided to sort all of the STL files that I have so that I'll be able to find them more easily.

I know what I've gone back and forth on it but I think I'm going to try one more iteration with the round schools I who is make sure that I have a ring that will hold 16 or 20 of the small paint bottles.

I need to make sure that when I speak to Fleming again that I discuss with her the opportunity to take a medication booster later in the afternoon because that's when I do seem to crash a lot more and I think I want to see if I can stop that.

I'm going to start seeing if I can print the foliage from the STL files I bought in the green PLA and see if that works.
!![[116th Field Artillery]]

@@.list-tree
*''Headquarters''
**//Headquarters// & [[Type 82 Kübelwagen]]
**[[OPEL]] ^^FDC^^

*''2x Battalions I & II''
**''3x Batteries''
***[[Type 82 Kübelwagen]] ^^Command^^
***2x //[[leFH18 105mm]] & [[SdKfz1]]


@@
;Work
:Look into Autopsy as a a Triage tool instead of EnCase.
:Parrott suggested that a USB-passthrough is the name of the keyboard that I was looking for the NUC.
::I ordered the G413 Keyboard which looks like it will work fine.
; 3D Printing Foliage
: Use the Chitubox to make the supports
: Select ''Light'' and then select ''1'' for every entry except for
:: Raft Shape - Skate
:: Raft Slope - 30
:: Density - 100
: Then remove any internal supports that are not on the edges of the Foliage design
!![img[Motorized Recon Regiment.French]] [[11th Regiment de Dragoons]]
<<<
;Regiment Headquarters
://Headquarters & [[Laffly]]//
://TOC & [[Camion]]//
:;Mortar Company
::2x //[[8 Mle 27/31]] & [[Camion]]//
::[[HTKS 25 25mm]] & [[Camion]]
:;Chasseur Company
:://[[H39]]// ^^Command^^
::3x [[H39]]
;3x Battalion
::;Headquarters
::://Headquarters & [[Laffly]]//
::://TOC & [[Camion]]//
:::2x //[[Motorcycle]]// ^^Recon^^
::;3x Companies
::://Headquarters & [[Laffly]]//
:::2x [[Infantry 40]] & [[Camion]]
:::[[Motorcycle]] ^^Recon^^
<<<
!![img[Recon Armored.Regiment.French]] [[12th Cuirassier Reconnaissance]]

<<<
;Regiment Headquarters
://Headquarters & Laffly//
://TOC & Camion//
;2x Battalion
://Headquarters & Laffly//
:;Company
:://Laffly// ^^Command^^
::Reconaissance Platoon & Camion
::4x Motorcycle Platoons
:;Company
:://[[AMD Panhard 178]]// ^^Command^^
::3x [[AMD Panhard 178]]
;Karlene
:Put together the two wardrobes for Karlene. Nearly passed out twice with black fade outs and red spots

;Battlefleet Gothic
:Found some nice fleet pictures
:[img[Fleet Painting Examples.image.01]]
:[img[Fleet Painting Examples.image.02]]
:[img[Fleet Painting Examples.image.03]]
:[img[Fleet Painting Examples.image.04]]

;Federation and Empire
:[img[Federation Fleet Painting Examples.image.01]]
:[img[Federation Fleet Painting Examples.image.02]]
:[img[Federation Fleet Painting Examples.image.03]]
:[img[Federation Fleet Painting Examples.image.04]]
!![img[French - AntiArmor - Battalion.image]] [[13th Escadron d' Anti-Char (Anti-tank)]]

<<<
;Battalion Headquarters
://Headquarters & Laffly//
;3x Companies
:~~//Headquarters & Laffly//~~
:2x //HTKS25 25mm & Camion//
!![[13th Infantry Regiment]]

@@.list-tree
* //Headquarters// & //[[Type 82 Kübelwagen]]//
*[[Opel]] ^^TOC^^
** ''Regimental Artillery''
*** 3x //SIG33 150mm// & //[[Krupp L 2 H 43]]//

* ''2x Battalions - I/13th and II/13th Regiment''
** ''Headquarters''
*** //Headquarters// & //[[Type 82 Kübelwagen]]//
*** TOC & [[Opel]]
** ''3x Companies''
*** //Headquarters// & //[[GrW36 50mm]]// & [[Opel]]
*** 3x [[Infantry 39]] & [[Opel]]
**151 Pzj
*** [[Pak36 37mm]] & [[Krupp L 2 H 43]]
**161 Kn
*** [[IG37 75mm]] & [[Krupp L 2 H 43]]
**171 172 Pzj
***2x [[MG34 - Sustained]] & [[Krupp L 2 H 43]]
**142-144
***3x [[GrW42 81mm]] & [[Krupp L 2 H 43]]
**Engineers
***//[[Headquarters]]// & [[OPEL]]
***3x [[Engineer]] & [[OPEL]]
***2x [[Engineer Motorcycle BMW R75]]

@@
!![[14th Infantry Regiment]]

@@.list-tree
* //Headquarters// & //[[Type 82 Kübelwagen]]//
*[[Opel]] ^^TOC^^
** ''Regimental Artillery''
*** 3x //SIG33 150mm// & //[[Krupp L 2 H 43]]//

* ''2x Battalions - I/14th and II/14th Regiment''
** ''Headquarters''
*** //Headquarters// & //[[Type 82 Kübelwagen]]//
*** TOC & [[Opel]]
** ''3x Companies''
*** //Headquarters// & //[[GrW36 50mm]]// & [[Opel]]
*** [[Infantry 39]] & [[Opel]]
**151 Pzj
*** [[Pak36 37mm]] & [[Krupp L 2 H 43]]
**161 Kn
*** [[IG37 75mm]] & [[Krupp L 2 H 43]]
**171 172 Pzj
***2x [[MG34 - Sustained]] & [[Krupp L 2 H 43]]
**142-144
***[[GrW42 81mm]] & [[Krupp L 2 H 43]]
**Engineers
***//[[Headquarters]]// & [[OPEL]]
***3x [[Engineer]] & [[OPEL]]
***2x [[Engineer Motorcycle BMW R75]]

@@
!![[15th Panzer Regiment]]

@@.list-tree
*''Headquarters''
**__//[[SdKfz 265]]//__ ^^Command^^
*** [[OPEL]] ^^TOC^^

* ''2x Battalions I and II''
**''Headquarters''
***__//[[SdKfz 265]]//__ ^^Command^^
*** [[OPEL]] ^^TOC^^
**''2x Company''
***__//[[Pz I]]//__ ^^Command^^
***3x [[Pz I]]
**''2x Company''
***__//[[Pz IIC]]//__ ^^Command^^
***3x [[Pz IIC]]
**''Company''
***__//[[Pz IIF]]//__ ^^Command^^
***4x //[[Pz IIF]]//
**''Company''
***__//[[Pz IVD]]//__ ^^Command^^
***4x //[[Pz IVD]]//



@@
;Miniatures
:Look to see if I can use the Peter Dennis paperboys figures and print them out at 10mm.
:Then see if I can use the scanned images to then use an .svg image to make a 3d STL of the form for each stand to then glue the paper print to.
:Look to make a base that is sized for the game I want to play with a 3mm height. Then add two 1mm wide and 2mm deep trenches that are offset to slide the tabs of the soldiers into. Maybe also then add a indented slot to use the 2mm sticky magnets as well.

;Amazon Gift List
:See if I can add items that are not available on Amazon to a gift list for Karlene and Madlyn.
:Extra power cord for shaver.
:Power cord for AirPlus260 in garage.
:DropToppers from Dr Tabletop for my paint collection.

;Paints
:See if Facebook can advise if there is a market for my Vallejo and Citidel paints so I can buy more Wargames Foundry paints instead.

;NoteShel Portable Sticky Note Holder
:[img[Note Shel.image]]
:[[Note Shel|http://www.noteshel.com/]]
!Rules


!! Game Setup

The maximum value of Economy, Morale, Political Victory Points and Military Victory Points is ''40''. The minimum value for any of them is ''0''.

!!!Economy

Used for paying mechanism when playing or using cards. It increases each turn in the adjustments phase and it can be saved from one turn to the next. The initial value is ''0''.

!!!Morale
Morale is the indicator of the state of mind of the side. War produces attrition, translating into a loss of Morale each turn. Morale  implies defeat, the enemy's Morale  means victory. The initial value is ''36''.


!!!Political Victory Points. 

Victory points accumulated by winning political objectives. The initial value is ''0''.

!!!Military Victory Points. 

Victory points accumulated by winning military objectives. The initial value is ''0''.


!!The Factions

The Republic is identified by a flag with three stripes of the same size of red, yellow and purple color. The Nationalists are identified by a flag with three stripes, being the middle one twice as big as the others, of red, yellow and red color.

Republicans, socialists, communists, anarchists, nationalist army, falangists, monarchists and carlists are the main factions and include characters that may be appointed leader.

International aid factions have sub-factions, but all are considered just one faction.
Some cards can belong to more than one faction, which is indicated by a compound faction symbol. These cards belong to both factions for all purposes, regardless of its suitability.


!!Beginning the Game

Each player shuffles his deck.

Each player has to offer cutting to the opposite player.

Each player starts with a hand of  cards.

As the side that rose up, the game is always started by the Nationalists.

!!Game Area

Each player plays his cards in front of him, in his rearguard. Armies and characters mobilized to military objectives have to be placed next to them. It is important to leave some distance between the rearguard and the military board.

A player may have: Cards in his hand (up to ''6'').

Played characters and armies in front of himself (rearguard).

Played and mobilized characters and armies (next to the military board).

Deck of cards to draw (reserve).

Deck of eliminated cards (limbo).

Deck of resolved military and political objectives.

!!Turn Sequence

!!!Adjustments Phase

In the  adjustments phase, the active side performs a series of adjustments. The order is open but one is recommended for convenience and for minimizing the risk of forgetting a step. The passive side doesn't do anything. 

;Economy
:The active side increases his Economy points. By default, the increment each turn is ''6''. The maximum Economy that may be accumulated is ''40''.
:If one or more cards affect the Economy in the adjustments phase (usually characters through their influence), all effects take place simultaneously. 

;Morale
:The active side reduces his Morale by ''1''.
;Resistance
:The active side reduces by ''1'' the Turns of Resistance in the military objective he defends if the Resistance Points are at least half its maximum Resistance Points (its initial value, rounded up). 
;Reinforcements
;:The active side draws ''10'' cards. If the maximum hand is exceeded, the surplus has to be immediately discarded (it doesn't have to be the card just drawn).
:The initial hand is ''6'' and in the first turn there are no reinforcements.

!!Main Phase

In the main phase, both sides have the opportunity of performing actions, although the active one has more available options. There is no order in which to carry out the different actions, but some of them may only be done once.

;Playing cards
:The active side may play character, army and management cards.
:The passive side may only play management cards. Playing a card requires spending Economy equivalent to its cost. Some cards require some conditions to be met in order to be played. :When a card is played, its effects are carried out immediately. The player who plays the card determines where the effects take place, unless the card explicitly mentions otherwise.
:In the first turn, no international aid card may be played.
;Using a card in play. 
:Both sides can use their cards in play (characters and armies). There are a few ways of using a card in play: appointing a leader among the characters in play, using a leader previously appointed, military actions of characters and armies, armies' abilities and the intervention of characters.
!![img[Infantry Battalion.British]] [[1st Battalion Welsh Guards]]
<<<
;Headquarters
://Headquarters// & [[15CWT BD]]
:[[3 ton Bedford QLD Lorry]] ^^TOC^^
://[[QML3 3in]] & [[3 ton Bedford QLD Lorry]]//
:[[Engineer]] & [[3 ton Bedford QLD Lorry]]
:[[BREN Truck with AA Gun]]

;2x BREN Platoons
::__//[[BREN]]//__
:://[[BREN]]//

;2x Company
://Headquarters// & [[15CWT BD]]
:3x [[Infantry 40]]







I just had to complete the ensemble. The tractor from the previous post, a scratchbuilt cereal packet towing limber and a big gun that had been in a box for a while. In the words of Chris Tarrant from his "TISWAS" days, "This is what we want!" 
































































[[1st Cuirassier Armoured Regiment]]

;Command
<<<
x1 [[S35 Somoua|FR08]]
<<<
: x1 [[Portee 25mm AT Gun|FR16]]
:x1 [[47mm Antitank Gun|FR25]]
:└x1 [[Laffly 1.5 ton Truck|FR19]]

;Maneuver Elements

<<<
<$transclude tiddler="FRME06" mode="block"/>
<$transclude tiddler="FRME06B" mode="block"/>
<<<

;Divisional Attachments

<<<
<$transclude tiddler="FRME03" mode="block"/>
<$transclude tiddler="FRME05" mode="block"/>
<<<

!![img[Recon Armored.Regiment.French]] [[1st Regiment d' Cuirassier]]

<<<
;Regiment Headquarters
;1^^eme^^ Battalion
:^^Headquarters^^ __//[[Somua S35]]//__ Command
:^^TOC^^ //[[CAMION]]//
:;3x Companies
::__//[[Somua S35]]//__ Command
::3x [[Somua S35]]
;2^^e^^ Battalion
:^^Headquarters^^ __//[[H39]]//__ Command
:^^TOC^^ //[[CAMION]]//
:;3x Companies
::__//[[H39]]//__ Command
::3x [[H39]]
!![img[Artillery Battery.British]] [[206th Battery/52nd (6th London) Anti-Tank Regiment, Royal Artillery]]

<<<
;''Headquarters''
://Headquarters// & [[Ford 8Cwt 4x4 (8A-26)]]
;''3x Firing Sections''
:3x [[British - Early War - 2-pdr Antitank Gun]] & [[3 ton Bedford QLD Lorry]]
; Work
: Continued processing multiple device from case 16102992 on Autopsy as part of Triage
:: Currently on device 218101-1a
: I need to keep a work log of what I am doing so I can turn it in as a weekly email to Sergeant Cronin to account for any LOS accounting.
:: Consider the specific glossary and supporting templates for reports as a good filler for the work log.

; TiddlyWiki
: Find the plugin that allows me to save and continue editing a tiddler so I do not lose work when I am editing a tiddler.

; Medical
: I saw the dermatologist at MetroDerm and no new spots or blemishes were noted.
: Dark spot over left eye is crepe-ing of the skin and not any issue.
: I made an appointment for August 2021 for next annual appointment.
: Obtained a steroid cream for the rash on my hand which is consistent with stress.
:: Do not use this cream indefinitely since it is strong enough to thin the skin. No more than 10-14 days at any time.

; Eve Online
: Lost my Hulk mining fleet to a group in 3-IN0V. 
: I really need to ensure that any mining is done with others instead of by myself.
: Running ratting mission with two Dominix and a Sacrilege worked well with a shield command burst from a Porpoise.

; Miniatures
: Nearly finished with second set of Baja Mahdists. 
:: Used Dusky Flesh as the spear shaft color.
: Ordered a set of Confederate and Union 10mm figures from Pendraken. I should expect these in mid-January.

; Hobby
: I am very happy with the Doctor Tabletop DropToppers that I bought from Gigabites Cafe. 
: The price is steep at $16 for six tops and caps, but they work very well.

;Charlie's Year
: Worked on making counters for Jeromey's Charlie's Year game. I did not care for making the homemade counters.
: I did find a service top print .75" counters that are thinner, but easier to deal with than Superior Print on Demand service which only offers 5/8 and 1"

; Audible
: I am listening to Hitler's War, a historical fiction that is based on World War II starting in 1936 and the effects of that change on history. Good story so far, narration is meh.

;ToDo
: Pick up cream from CVS
: Put gas in car
!![img[German - Armor - Regiment.image]] [[25th Panzer Regiment]]

<<<
;Regimental Headquarters
://Headquarters// & //[[Type 82 Kübelwagen]]//
:[[OPEL]] ^^TOC^^

;3x Battalions I, II & III
:__//SdKfz265//__ ^^Command^^
:[[OPEL]] ^^TOC^^
:;Company
::__//[[Pz1]]//__ ^^Command^^
::4x //[[Pz1]]//
:;Company
::[[Pz2C]] ^^Command^^
::3x [[Pz2C]]
:;2x Company
:://[[Pz38T]]//
::3x [[Pz38T]]
:;Company
::__//[[PzIVD]]//__ ^^Command^^
::4x //[[PzIVD]]//
<<<
!![img[AntiArmor Company.British]] [[260th Battery/65th Antitank Regiment Royal Artillery]]

<<<
;Headquarters
://Headquarters// & [[Daimler]]

;3x Batteries
:[[British - Early War - 2-pdr Antitank Gun]] & [[3 ton Bedford QLD Lorry]]
!![img[AntiArmor Company.British]] [[26th Battery/52nd (6th London) Anti-Tank Regiment, Royal Artillery]]
<<<
;Headquarters
://Headquarters// & [[Ford 8Cwt 4x4 (8A-26)]]
;3x Firing Sections
:3x [[British - Early War - 2-pdr Antitank Gun]] & [[3 ton Bedford QLD Lorry]]
!! Journal

So it is the day after Christmas and all is well in the house.

I had a great time with Karlene and Maddy here in Hiram, and Adriaan came for dinner as well.

!! Punchlist
: Send a text to Joseph with my current computer stats and the possible stats of the NUC replacement computer that I will want to buy.
: See if he can suggest a reinstall new memory to stop the restarts on the Desktop PC and if we have that memory at work that I can use.
: Find a way to use voice recognition to make these entries a lot easier to work with.
:: Possibly with the mobile device where I can send the audio as a chat message transcribed?

!! Plans

; NUC build choices
: The Hades Canyon with its Core i7-8809G with Radeon Vega M graphics is around $900
: https://www.windowscentral.com/intel-nuc-gaming-pc

; Current Plan
: Use the [[Intel NUC 9 Extreme Kit (Ghost Canyon) BXNUC9i9QNX1]] and add the following:
:: Can I use the graphics card I have now? If not, what is a good choice.
:: What memory can I buy to fill it to 16GB of the 64GB max and not have to replace the memory.
:: m.2 SSD storage about 1TB, or can I use the portable SSD I have and attach it internally until I want to buy the better 1TB internal
: Otherwise what mistakes could I make with this device by using something that does not make best use of the system.

!! Problems




!! Postage and Posts

!!! Adriaan

Hey there, do you need what a gaming-esqe desktop? Mine is showing some memory problems that I can fix, but it is also a great opportunity to buy myself and new one and pass this on to you.


!!! Joseph

Joseph,

I hope that you and yours had a great Christmas, and more that you had the opportunity to get some sleep.

I am bothering you to confirm what I think I already know about my home PC. When I run it with four instances of Eve:Online, I find that it suddenly shuts off and restarts. No BSoD, or any other logs. I have since reset all of my BIOS to original settings and I do not have any overclocking set. I have also set all of the memory to the slowest and basic settings, but I get the same results.

I believe that one or more of the memory modules has gone bad. I suspect that if I take some of the memory from work and try them is succession I should be able to fix the problem.

Well the short answer is that this isn't a problem, just a chance to fix this computer and give it to my brother, and buy myself a new computer.

So.

Can you suggest the best website for picking parts to build a PC and later can I send you my current PC stats and what I think I want to buy so you can ensure that I am getting what I expect for what I pay for?

Thank you.
Pm

---

;Answer for what type of device I think I want to get.

https://www.intel.com/content/www/us/en/products/compare-products.html/boards-kits?productIds=190107,147502,126143

So far my thought is for the Intel® NUC 9 Extreme Kit - NUC9i9QNX on this comparison.

I figure I can add the large capacity memory (what type is best) to get the 16GB which is half of max supported. Then use a 1TB M.2 for the on device storage, and have my NAS as an on-Demand Storage for everything I have stored as needed.

I think the advantage here is that the chip is not soldered on and can be upgraded and that this may have the best graphics to start off with.

!!! Pk

I promised to write him today.

!!! Peter Trinkle

I need to write him and make plans for 12/30 to play games here.

!!! Jeromey

I need to write later and follow up on the counters that I sent him.
!! Personal

Up early today, but I did possibly sleep six hours, I just keep waking up fully alert even though my body is still very tired.

!! Promises

!! Problems

!! Plans

!!! Punchlist
; Citadel Contrast Paints
: Find the spreadsheet with the paint information and export the data for the Citadel Contrast Paints.
: This should allow me to make a list of which Citadel Contrast Paints I can use as a base shade for the Wargames Foundry Paints

; Find the best app for voice dictation
: This should allow me to add notes to my TW more easily as well.



!! Post & Postings

!!! Person



;Source
:https://www.kickstarter.com/projects/2104924145/28mm-terracotta-army

[img height=200 [28mm Terracotta Army.image]]
[[2nd Cuirassier Armoured Regiment]]

;Command
<<<
x1 [[S35 Somoua|FR08]]
<<<
: x1 [[Portee 25mm AT Gun|FR16]]
:x1 [[47mm Antitank Gun|FR25]]
:└x1 [[Laffly 1.5 ton Truck|FR19]]

;Maneuver Elements

<<<
<$transclude tiddler="FRME06B" mode="block"/>
<$transclude tiddler="FRME06B" mode="block"/>
<<<

;Divisional Attachments

<<<
<$transclude tiddler="FRME03" mode="block"/>
<$transclude tiddler="FRME05" mode="block"/>
<<<

!![img[Recon Armored.Regiment.French]] [[2nd Regiment d' Cuirassier]]

<<<
;Regiment Headquarters
;1^^eme^^ Battalion
:^^Headquarters^^ __//[[Somua S35]]//__ Command
:^^TOC^^ //[[CAMION]]//
:;3x Companies
::__//[[Somua S35]]//__ Command
::3x [[Somua S35]]
;2^^e^^ Battalion
:^^Headquarters^^ __//[[H39]]//__ Command
:^^TOC^^ //[[CAMION]]//
:;3x Companies
::__//[[H39]]//__ Command
::3x [[H39]]
!![[31st Panzer Regiment]]

@@.list-tree
*''Headquarters''
**__//[[SdKfz 265]]//__ ^^Command^^
*** [[OPEL]] ^^TOC^^

* ''2x Battalions I and II''
**''Headquarters''
***__//[[SdKfz 265]]//__ ^^Command^^
*** [[OPEL]] ^^TOC^^
**''2x Company''
***__//[[Pz I]]//__ ^^Command^^
***3x [[Pz I]]
**''2x Company''
***__//[[Pz IIC]]//__ ^^Command^^
***3x [[Pz IIC]]
**''Company''
***__//[[Pz IIF]]//__ ^^Command^^
***4x //[[Pz IIF]]//
**''Company''
***__//[[Pz IVD]]//__ ^^Command^^
***4x //[[Pz IVD]]//

@@
!![img[Artillery Battery.British]] [[352nd Battery/91st Royal Artillery]]
<<<
;Headquarters
://Headquarters// & [[Ford 8Cwt 4x4 (8A-26)]]
;3x Firing Sections
:3x [[QF25]] & [[Matador]]




@@
!![img[Artillery Battery.British]] [[365th Battery/92nd Royal Artillery]]

<<<
;Headquarters
://Headquarters// & [[Ford 8Cwt 4x4 (8A-26)]]
;3x Firing Sections
:3x [[QF25]] & [[Matador]]




@@
!! [img[Artillery Battery.British]] [[368th Battery/92nd Royal Artillery]] 
<<<
;Headquarters
://Headquarters// & [[Ford 8Cwt 4x4 (8A-26)]]
;3x Firing Sections
:3x [[BL4.5]] & [[Matador]]
<<<
!![img[Recon Armored.German]] [[37th Aufklaurungs Battalion]]

<<<
;Battalion Headquarters
://[[SdKfz 232/8]]// ^^Command^^
:[[OPEL]] ^^TOC^^
;I Battalion
://Headquarters// & //[[Type 82 Kübelwagen]]//
:[[Engineers]] & [[OPEL]]
:[[Pak36 37mm]] & [[Krupp L 2 H 43]]
://[[IG37 75mm]]// & //[[Krupp L 2 H 43]]//
;2x Companies
://[[SdKfz 263]]// ^^Command^^
:[[SdKfz 232]] ^^Recon^^
:[[SdKfz 231]] ^^Recon^^
:3x [[SdKfz 221]] ^^Recon^^
:[[SdKfz 222]] ^^Recon^^
;Company
://Headquarters// & //[[Type 82 Kübelwagen]]//
:3x [[BMW R75]]
<<<
!![img[NATO - Engineer - Battalion.image]] [[​39th Bataillion du Genie]]

<<<
;Battalion
://Headquarters & Laffly//
://TOC & Camion//
;3x Company
://Headquarters & Laffly//
:3x Engineers & Camion
;Bridging Company
://Headquarters & Laffly//
:3x Pontoon & Camion

;Websites
:https://italianmoose0.wixsite.com/dpib




!!! Patreons creating Miniatures

|3DArtGuy|https://www.patreon.com/3DArtGuy|Fantasy |
|AMINI3D|https://www.patreon.com/AMINI3D|Fantasy |
|Archvillain Games|https://www.patreon.com/ArchvillainGames|Fantasy|
|Art of Mike|https://www.patreon.com/art_of_mike|Sci-Fi|
|Artisan Guild|https://www.patreon.com/ArtisanGuild|Fantasy|
|Asgard Rising Miniatures|https://www.patreon.com/asgardrising|Fantasy|
|Averted Vision|https://www.patreon.com/avertedvision|Fantasy|
|Averted Vision|https://www.patreon.com/avertedvision|Fantasy |
|Battle Yak|https://www.patreon.com/BattleYakMiniatures|Fantasy|
|Beer and Pretzels|https://www.patreon.com/m/beerandpretzels|Fantasy|
|Benedict Borrowdale|https://www.patreon.com/benedictborrowdale|Fantasy|
|BESTIARUM MINIATURES|https://www.patreon.com/BestiarumMiniatures|Fantasy|
|BigMrTong|https://www.patreon.com/bigmrtong|Fantasy|
|Black Carrot Design|https://www.patreon.com/blackcarrotdesign|Fantasy |
|Black Omen|https://www.patreon.com/blackomen|Fantasy |
|BriteMinis|https://www.patreon.com/BriteMinis|Fantasy |
|Capsule chibi|https://www.patreon.com/capsule|Fantasy|
|Cast N Play|https://www.patreon.com/castnplay|Fantasy |
|Clay Cyanide Miniatures|https://www.patreon.com/claycyanide|Fantasy|
|Clynche|https://www.patreon.com/clynche/posts|Fantasy|
|Comet Lord Miniatures|https://www.patreon.com/CometLordMiniatures|Fantasy |
|DCA Tabletop|https://www.patreon.com/dcatabletop|Fantasy |
|DH Tabletop Emporium|https://www.patreon.com/dhtabletopemporium|Fantasy|
|Duncan Shadow Louca|https://www.patreon.com/Duncan_shadow|Sci-fi / Fantasy|
|Epics 'N' Stuffs|https://www.patreon.com/lancewilkinson|Fantasy|
|Epics 'N' Stuffs Miniatures|https://www.patreon.com/lancewilkinson|Fantasy|
|fabio Schizzo|https://www.patreon.com/fabioschizzo|Fantasy |
|Francesco A. Pizzo|https://www.patreon.com/francesco_a_pizzo_ghamak|Sci-fi / Fantasy|
|Fungeons and Fandoms|https://www.patreon.com/fungeons_and_fandoms|Fantasy|
|GloomyKid|https://www.patreon.com/gloomyKidMinis|Fantasy |
|Goon Master Games|http://www.patreon.com/goonmastergames|Fantasy|
|Hero Spawn Spot|https://www.patreon.com/HeroSpawnSpot|Fantasy|
|HEROES INFINITE|https://www.patreon.com/HeroesInfinite|Fantasy|
|Jason Coleman|https://www.patreon.com/VirtuallyJason|Fantasy|
|Jeremy Smith|https://www.patreon.com/J_Smith|Fantasy|
|Kaede Game Sculpture|https://www.patreon.com/kaedegamesculpture|Fantasy |
|LabradoriteWolf|https://www.patreon.com/labradoritewolf|Fantasy|
|Lion Tower Miniatures|https://www.patreon.com/ltminis|Fantasy |
|Lost Kingdom Miniatures|https://www.patreon.com/LostKingdomMiniatures|Fantasy|
|M3DM|https://www.patreon.com/M3DM/posts|Fantasy|
|Magori Miniatures|https://www.patreon.com/magoriminiatures|Fantasy|
|Manuel Boria|https://www.patreon.com/Manuel_Boria|Fantasy|
|MEGS3D|https://www.patreon.com/megs3d|Fantasy |
|Mini Monster Mayhem|https://www.patreon.com/minimonstermayhem|Fantasy|
|Monstrous Encounters|https://www.patreon.com/monstrousencounters|Fantasy |
|mz4250|https://www.patreon.com/mz4250|Fantasy|
|Nickey's Hatchery|https://www.patreon.com/NickeyHatchery|Fantasy |
|onepagerules|https://www.patreon.com/onepagerules|Sci-Fi / Fantasy|
|Onmioji|https://www.patreon.com/onmioji|Fantasy |
|Orc King|https://www.patreon.com/3Dminiatures|Fantasy |
|Printed Adventures|https://www.patreon.com/printingadventures|Fantasy|
|Printed Obsession|https://www.patreon.com/printedobsession|Fantasy |
|PrintYourMonsters|https://www.patreon.com/PrintYourMonsters|Fantasy |
|Reptilian Overlords|https://www.patreon.com/reptilianoverlords|Sci-Fi|
|Rocket Pig Games|https://www.patreon.com/rocketpiggames|Fantasy |
|RPG sculpt|https://www.patreon.com/rgsculpt|Fantasy |
|The Cult of Pickle|https://www.patreon.com/cultofpickle|Fantasy |
|The Dork Factory|https://www.thingiverse.com/dorkfactory/designs|Sci-Fi / Fantasy|
|The Makers Cult|https://www.patreon.com/themakerscult|Sci-Fi|
|The Smiths of Urth|https://www.patreon.com/smithsofurth|Fantasy |
|Tiger Skull RPG|https://www.patreon.com/TigerSkullRPG|Fantasy|
|Titan-Forge Miniatures|https://www.patreon.com/titanforgeminis|Fantasy|
|Top Table Miniatures|https://www.patreon.com/toptableminiatures|Fantasy|
|Vae Victis Miniatures|https://www.patreon.com/vaevictisminiatures|Fantasy |
|White Werewolf Tavern|https://www.patreon.com/whitewerewolftavern|Fantasy|
|Will Walker|https://www.patreon.com/WillWalker|Fantasy|
|Yasashii Kyojin Studio|https://www.patreon.com/yasashiikyojinstudio|Fantasy|


[[Pill Bottle Bottom End Piece for Painting Handle]]
![img[French Forces.image]] [img[Armor Light Division.French]] [[3e Division Legere Mecanique]]



; Division Headquarters
;[[5th Light Mechanized Armoured Brigade|FRBG09]]
;:<$transclude tiddler="1st Cuirassier Armoured Regiment" mode="block"/>
;:<$transclude tiddler="2nd Cuirassier Armoured Regiment" mode="block"/>
;6th Light Mechanized Infantry Brigade
;:11th Dragoon Mechanized Infantry Regiment
;:12th Cuirassier Reconnaissance Cavalry Regiment
;76th Mechanized Artillery Regiment




---

!! Work Log

;Review Det. Pilgrim's Report
: Identifed errors in reporting in regards to ommisions and jargon languare in reporting.
: Discussed why reporting helps with final product and testimony.
: Provided discussion on topics to help with note taking and developing reporting

; 20072364
: Located missing evidence from case.
: Discussed with Sgt CAP about lack of PCR/ECR
: Closed the case.

; Researched Contemporaneous Note taking 
: For self and as training subjects for Det. Pilgim.

; Back up cases to on-board
: Backed up on board cases
: Backed up cases to NAS
:: Unable to do to no space on NAS

; 18021273
: Close case and enter RMS report.
:: No response or further request by investigator after providing preview on 03Dec20.



!! Telework

; Review ICAIS Workbooks
: Review training material provided by Det. Harder from the class that he was taking

; Review archive progress on Workstation
: Workstation busy with archive processes.
!! [img[Armor Regiment.British]] [[4th Royal Tank Regiment]]

<<<
;Headquarters
://[[British - Early War - Matilda I (A11)]]//
:[[3 ton Bedford QLD Lorry]] ^^TOC^^
:2x //[[Vickers Mk VI B]]// ^^Recon^^
;3x Company
:[[British - Early War - Matilda I (A11)]] ^^Command^^
:3x [[British - Early War - Matilda I (A11)]]


<h3 class='post-title entry-title' itemprop='name'>
Sudan. 5th (Royal Irish) Lancers.
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-232895700087600646' itemprop='description articleBody'>

<p>Inspired by the interesting uniform depicted in the Caton Woodville illustration of the Royal Irish Lancers, here are the first three of a squadron of twelve. These are Perry AZW Lancers with some uniform detail removed with a sharp blade and a little greenstuff added to form the paggri on the helmet. Painted up in a plain blue frock, Bedford Cord&nbsp; riding breeches and a paggri in the regimental facing colour.

</p>

<a href="../../../1.bp.blogspot.com/-Q5GJuP-Lxbs/X4wmiV2WfwI/AAAAAAAAIzw/lJlnTYnbHSwuh76_oUHr92xrQ_V14WfswCLcBGAsYHQ/s1599/P1040697.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="863" data-original-width="1599" src="../../../1.bp.blogspot.com/-Q5GJuP-Lxbs/X4wmiV2WfwI/AAAAAAAAIzw/lJlnTYnbHSwuh76_oUHr92xrQ_V14WfswCLcBGAsYHQ/s320/P1040697.jpg" width="320" /></a></div>

<a href="../../../1.bp.blogspot.com/-P32CleQ7psA/X4wmgrJg9DI/AAAAAAAAIzs/cIdytGY351IhxT970jPz1YFPKAEF1G8KwCLcBGAsYHQ/s1682/P1040696.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="895" data-original-width="1682" src="../../../1.bp.blogspot.com/-P32CleQ7psA/X4wmgrJg9DI/AAAAAAAAIzs/cIdytGY351IhxT970jPz1YFPKAEF1G8KwCLcBGAsYHQ/s320/P1040696.jpg" width="320" /></a></div>

<a href="../../../1.bp.blogspot.com/-q7nKx881JGE/X4wmesftZCI/AAAAAAAAIzo/blfUBwTL60wLaG3z-gj6Rxr_P4TADqnlgCLcBGAsYHQ/s1489/P1040695.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="860" data-original-width="1489" src="../../../1.bp.blogspot.com/-q7nKx881JGE/X4wmesftZCI/AAAAAAAAIzo/blfUBwTL60wLaG3z-gj6Rxr_P4TADqnlgCLcBGAsYHQ/s320/P1040695.jpg" width="320" /></a></div>

<a href="../../../1.bp.blogspot.com/-WQFOklHUQuA/X4wmc9riK0I/AAAAAAAAIzk/R24FFTvs4PA_5tOxjYGJHgDRUUC3pI70QCLcBGAsYHQ/s1549/P1040694.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="855" data-original-width="1549" src="../../../1.bp.blogspot.com/-WQFOklHUQuA/X4wmc9riK0I/AAAAAAAAIzk/R24FFTvs4PA_5tOxjYGJHgDRUUC3pI70QCLcBGAsYHQ/s320/P1040694.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;">
</div>

<a href="../../../1.bp.blogspot.com/-yfJmdKGPCLU/X4wmyRpTj2I/AAAAAAAAI0E/woRILt12v1ksvTr4t40F7qvhjPleY5UhACLcBGAsYHQ/s583/5th%20Lancers%20charge%20at%20Suakin.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="413" data-original-width="583" src="../../../1.bp.blogspot.com/-yfJmdKGPCLU/X4wmyRpTj2I/AAAAAAAAI0E/woRILt12v1ksvTr4t40F7qvhjPleY5UhACLcBGAsYHQ/s320/5th%20Lancers%20charge%20at%20Suakin.jpg" width="320" /></a></div>

<div style='clear: both;'></div>
</div>
!! Personal

!! Promises

!! Problems

!! Plans

!!! Punchlist
; Task
: Actions

!! Post & Postings

!!! Person

---

!! Work Log

; Scheduled Vaccine Testing
: Appointment for Saturday

; Mentor Tobias Sams
: Shadow TBCU for future assignment
: Assigned to work on lab phones and have Virgil show him what he has learned

; Upgrade Drives
: Aquired an eight TB drive
: Move case files to temp drives
: Install new drive
: Install upgrades
: Create Storage Space for case files, as Parity Space
: Create Workstation as Simple Space
: Reload case files
: Update Archive function to NAS to store critical Image files


!! Telework
; Monitor File Transfers from Drive upgrade


; Work on Glossary for Reports
: Creating a glossary allows all forensic terms to be defined in a report for the benefit of end users.


!! Future Work
; Locate all Evidence Items in my control
: Resolve those cases or return evidence
: Complete before move to new office

; Identify all property that needs to be moved
: Specific to me
: Mission critical
:: Other personal items

[[5th Light Mechanized Armoured Brigade]]

;Command
<<<
[[Commander|FR29]]<br>
└[[Laffly 1.5 ton Truck|FR19]]
<<<

;Battlegroups
<<<
;x4 [[FRBG06]]
<<<

;Divisional Attachments
<<<
;<$transclude tiddler="FRME03" mode="block"/>
;<$transclude tiddler="FRME05" mode="block"/>
<<<

;Fire Support
<<<
;x2 [[FRFS01]]
;x1 [[FRFS03]]
<<<
![img[German Forces.image]] [[5th Panzer Division]]

:<$list filter="[tag[5th Panzer Division]]">
<h2><$link><$transclude tiddler/></$link></h2>
<$transclude mode="block"/>
</$list>
!![img[Infantry Battalion.British]] [[6th Durham Light Infantry (DLI)]]

<<<
;Headquarters
://Headquarters// & [[15CWT BD]]
:[[3 ton Bedford QLD Lorry]] ^^TOC^^
://[[QML3 3in]] & [[3 ton Bedford QLD Lorry]]//
:[[Engineer]] & [[3 ton Bedford QLD Lorry]]
:[[BREN Truck with AA Gun]]
:[[British - Early War - 2-pdr Antitank Gun]] & [[3 ton Bedford QLD Lorry]] ^^151th Infantry Brigade^^
;BREN Company
:__//[[BREN]]//__ ^^Command^^
;;3x Sections
:://[[BREN]]//
::__//[[BREN ATR]]//__
;4x Companies
://Headquarters// & [[15CWT BD]]
:3x [[Infantry 40]]





!![[75mm Mle 1897 ]]
|[img height=100 [TITLE.image]]|!FR-23|DESCRIPTION |<|! Target |! 0 |! 5 |! 10 |! 20 |! 40 |
|~|!Type|Vehicle|SIZE| V | 000 | 000 | +000 | 000 | 000 |
|~|!Armor| 000 | 000 | TG | 000 | 000 | 000 | 000 | 000 |
|~|!Wheeled| 000 | 000 | A |  |  |  |  | |
|~|Notes|NOTES |<|<|<|<|<|<|<|
!![img[NATO - Artillery - Regiment.image]] [[​76th Regiment d' Artillerie]]

<<<
;Regiment Headquarters
://Headquarters & Laffly//
:CAMION ^^FDC^^

;Antitank Company
://Laffly// ^^Command^^
:25mm HTKS25 & Camion
:;2x Sections
::47mm APX & Camion

;75mm Battalion
://Headquarters & Laffly//
:;2x Batteries
:://Laffly// ^^Battery Command^^
::2x //75mm SQ75// & //Laffly P107// ^^Tracked^^

;155mm Battalion
://Headquarters & Laffly//
:;2x Batteries
:://Laffly// ^^Battery Command^^
::2x //155mm GPF// & Laffly MCG ^^Tracked^^


!![img[Infantry Motorcycle.German]] [[​7th Kradschutzen Battalion]]

<<<
;Headquarters
://Headquarters// & //[[Type 82 Kübelwagen]]//
:[[OPEL]] ^^TOC^^
;Weapons Company
://Headquarters// & //[[Type 82 Kübelwagen]]//
:[[GrW42 81mm]] & [[OPEL]]
:[[IG37 75mm]] & [[OPEL]]
:[[PAK36 37mm]] & [[OPEL]]
;2x Company
://Headquarters// & //[[Type 82 Kübelwagen]]//
:3x [[BMW R75]]

<<<
![img[German Forces.image]] [[7th Panzer Division]]

:<$list filter="[tag[7th Panzer Division]]">
<h2><$link><$transclude tiddler/></$link></h2>
<$transclude mode="block"/>
</$list>


<<list-links "[tag[7th Panzer Division]sort[title]]">>
!![img[Armor Regiment.British]] [[7th Royal Tank Regiment (-)]]

<<<
;Headquarters
://[[British - Early War - Matilda I (A11)]]//
:[[3 ton Bedford QLD Lorry]] ^^TOC^^
:2x //[[Vickers Mk VI B]]// ^^Recon^^

;2x Company
:[[British - Early War - Matilda I (A11)]] ^^Command^^
:3x [[British - Early War - Matilda I (A11)]]

;Company
:[[A12]] ^^Command^^
:2x [[A12]]

!![[89th Pioneer Battalion]]

@@.list-tree
*''Headquarters''
**//Headquarters// & //[[Type 82 Kübelwagen]]//
**TOC & [[OPEL]]
**2x //[[kzGrW42 81mm]]// & [[OPEL]]
**2x //[[SKODA RB]]//

*''3x Companies''
**//Headquarters// & //[[Type 82 Kübelwagen]]//
**[[Engineers]] & [[SdKfz 251/5]]
**2x [[Engineers]] & [[OPEL]]


@@
!![[8th Aufklaurungs Battalion]]

@@.list-tree
*''Headquarters''
**//[[Sdkfz 232/8]]// ^^Command^^
**[[OPEL]] ^^TOC^^

**''Company''
***//Headquarters// & [[Type 82 Kübelwagen]]
***[[Engineer]] & [[OPEL]]
***[[Pak35 37mm]] & [[Krupp L 2 H 43]]
***[[IG37 75mm]] & [[Krupp L 2 H 43]]

**''2x Company''
***//[[SdKfz 263]]// ^^Command^^
***2x [[SdKfz 231]]
***4x [[SdKfz 221]]

**''Company''
***//Headquarters// & [[Type 82 Kübelwagen]]
***3x [[Motorcycles]]




@@
!![img[Infantry Battalion.British]] [[8th Durham Light Infantry (DLI)]]

<<<
;Headquarters
://Headquarters// & [[15CWT BD]]
:[[3 ton Bedford QLD Lorry]] ^^TOC^^
://[[QML3 3in]] & [[3 ton Bedford QLD Lorry]]//
:[[Engineer]] & [[3 ton Bedford QLD Lorry]]
:[[BREN Truck with AA Gun]]
:[[British - Early War - 2-pdr Antitank Gun]] & [[3 ton Bedford QLD Lorry]] ^^151th Infantry Brigade^^
:2x //[[Motorcycles]]// ^^Recon^^
;BREN Platoon
:__//[[BREN]]//__ ^^Command^^
:;3x Platoon
:://[[BREN]]//
::__//[[BREN ATR]]//__
;4x Companies
://Headquarters// & [[15CWT BD]]
:3x [[Infantry 40]]

!! Personal

!! Promises

!! Problems

!! Plans


---

; Punchlist
{{Punchlist}}



!![[93rd FLAK Battalion]]

@@.list-tree
*''Headquarters''
**//Headquarters// & //[[Type 82 Kübelwagen]]//

*''2x Companies''
**//Headquarters// & //[[Type 82 Kübelwagen]]//
**2x //[[FLK38 20mm]]// & [[OPEL]]

*''2x Companies''
**//Headquarters// & //[[Type 82 Kübelwagen]]//
**2x //[[FLK37 37mm]]// & [[OPEL]]


@@
;Kickstarter
: I read the update about the Terracotta Army Project and I added a supporting comment.
:[[https://www.kickstarter.com/projects/2104924145/28mm-terracotta-army/posts/3041854]]

;Karlene
:I completed her request for the receipt for the Amazon order of the toner cartridges.

;Work
:I took the day off, I felt poorly last night, but the depression has made me very tired and I am sleeping in more than I would otherwise like to.
:Once I take my medication, I can recover well but it does take me a while to spin up and it does not seem to last as long as it usually does.

;Eve Online
:Look at this tool for figuring out what to use PI  for : [[https://hanns.io/pi/]]
; TiddlyWiki
: Located and loaded the TOC Plugin for multilevel-toc-expandable macros
: https://kookma.github.io/TW-TOC/

// The army of the queen hath got the field: My uncles both are slain in rescuing me; <br>And all my followers to the eager foe Turn back and fly, like ships before the wind <br>Or lambs pursued by hunger-starved wolves.  //

//Richard, Duke of York- Henry VI Part III//

[img[A Coat of Steel.acos.GIF]]

[img[A Coat of Steel.ed%20beauf.JPG]]

[img[A Coat of Steel.humph%20staf.JPG]]

[img[A Coat of Steel.img0202.jpg]]

[img[A Coat of Steel.lancaster.JPG]]

[img[A Coat of Steel.warwick.JPG]]

[img[A Coat of Steel.york.JPG]]

[img[A Coat of Steel.ACOPcover3.JPG]]

[img[A Coat of Steel.acopmarkersamp.jpg]]


Between 1450 and 1490 direct usurpation was the rule rather than the exception. Around a half dozen men claimed the crown of England-Henry Holland, Richard of York, Lambert Simnel and Perkin Warbeck failed. Edward Earl of March, Richard Duke of Gloucester and Henry Tudor succeeded. Henry of Lancaster possessed it twice, while his son was dispossessed once.

Miniatures rules unlike anything you've seen before.

We don't think that's an idle boast, and we don't make it lightly... these rules have been in the making for almost ten years. We've poured our hearts and souls into them! The graphics alone should give you pause, while looking at the individual Noble cards should give you a hint as to how much historical research when into them.

Just as important, the systems in this game are chock full of novel systems and historical flavour without being bogged down with minute details that halt the flow of play. You always know where you are and how you got there, the trick being to get yourself out of the jam you just got yourself into! Maybe it's best to look at the pages and pages of play examples we provide, or just look at the replay below.

Special scenario rules for odd occurances? Nope.

How do you refight Bosworth without a pile of special rules for the Stanley's treachery or Northumberland's hesitance? What about Warwick's confusion at St. Alban's II, or Grey's treason at Northampton? How does Somerset get tempted off the hill at Tewkesbury? What about Fauconberg's trick at Towton? Using devilishly slick and easy mechanics, you can not only recreate those occurances when refighting famous battles, they will happen in battles you generated with our Campaign game!  

 Aren't Wars of the Roses battles just giant scrums and therefore boring?

 Aren't Wars of the Roses battles just giant scrums and therefore boring?
No, they're not, at least the way we work them. Each hand-to-hand encounter with the enemy is like a little game of its own. Both sides get six cards with different tactics you can employ- lead with your Nobles, call for a supreme effort (dangerous if the men aren't up to it) thrust and poke at them to keep your casualties low, gather into a tight-knit unit around the standards to make it hard for them to break in amongst you, or go all-out with daggers drawn for maximum execution. Each card has its strengths and weaknesses you will used based on the troops and nobles engaged and even inhow the battle is going in other wards. Delay or try to end it quickly? Go for casualties or go for the leaders? 

What about Archery?

Depending on your battle plan, each ward will issue archers with the type and amount of arrows needed to succeed. Flight arrows are good for long range, but lack weight. Sheaf arrows are heavy but for close range. More than that, timing really counts. You can try and stop an enemies advance cold, and disorganize his attack. You can try and force him to rush you, or come out of defensive works. Or you can just try to kill as many of them as you can. It's your choice.

Are Noble commanders important?

The whole system depends on who's in command. Their Loyalty to the cause will dictate how long they intend to fight and with how much enthusiasm. Some Lords are Committed, some Well-Wishers, and some Trimmers. Further, each has a Puissance rating that gives his prowess in leading his company when it comes to handstrokes. Most importantly however are his command characteristics. Edward of March is Audacious- lots of initiative, capable of choosing all kinds of stratagems before play begins, like Forethought, the ability to come up with a required order he didn't prepare for. Some Nobles are Old soldiers, like the Earl of Salisbury, capable of solid tactics but a little staid. Others are Practiced, and still others, Amateurs. There are a number of Lords that have Dangers, Such as Impetuousity, or are Timorous, which can lead to very bad decisions at critical times...
!![img[Infantry Company.British]] [[A Coy/4th Battalion Royal Northumberland Fusiliers]]
<<<
;Headquarters
://Headquarters// & [[15CWT BD]]

;Company
://Headquarters// & [[15CWT BD]]
:3x [[Infantry 40]]
Scourge Of The Gothic Sector

<<<
Abaddon is known to be the driving force behind the Black Crusade which ravaged the Gothic sector between 142.M41 and 160.M41.

What means he used to bring together the fleets of so many different Chaos Lords and Warmasters is unknown, but even his unholy gift of leadership must have been stretched to the full coordinating the attacks of such an anarchic coalition. Abaddon’s own warfleet was the most powerful in the sector and one of the last to be defeated. This was in no small part due to the awesome power of the Planet Killer at his command, to say nothing of the Blackstone Fortresses he succeeded in corrupting to the service of the Dark Gods.

Abaddon was once a Space Marine, a captain of the Lunar Wolves’ 1st Company during the Great Crusade, over 10,000 years ago, conquering distant stars in the name of the Emperor. The Lunar Wolves battled across uncounted worlds to free them from alien tyranny or the taint of Chaos, and Abaddon was ever at the fore. But at the time of the Great Heresy, Abaddon chose to betray the Emperor and join with the forces of his Primarch, the Warmaster Horus, in his attack on Earth. Upon Horus’ defeat, Abaddon rallied the remnants of the hordes which had fought on Earth and fled to the Eye of Terror, where the powers of Chaos welcomed him as their champion.

For ten millennia Abaddon has continued to harry the Imperium at every opportunity, raining fire and destruction on the empire of Mankind that he helped to build. The Gothic War is one of the most recent of his terrible works, but his history of bloodshed extends as far back as the Imperium itself. During the Gothic War, Abaddon took personal command of the Planet Killer in many engagements, although he escaped its destruction at Kharlos II.
<<<

!!ABADDON AS FLEET COMMANDER 
Abaddon can be chosen to act as fleet commander in any game in which the Chaos fleet is worth 1,000 points or more. You may not place a Chaos Lord on the same ship as Abaddon (you don’t get to be a Chaos Lord by spending lots of time near a bloody-tempered maniac!). He has the following characteristics: 
;Leadership
: 10 
:Abaddon is an exceptional commander in all respects. His crew and fleet live in mortal terror of arousing his anger and perform at peak efficiency when he is aboard. He is also aided by the prophecies of the Sorcerer Zaraphiston.

;Re-rolls
: 1 per turn.

Abaddon’s awesome reputation and dogged determination ensure there are seldom any failures in the chain of command. When there are, the consequences are likely to be dire.

Abaddon’s fleet is allowed to re-roll a single Command check or Leadership test each turn.

!!SPECIAL RULES

The following special rules apply to Abaddon: Boarding Actions Abaddon is accompanied by his company of Black Legion Traitor Marines aboard the ship he is commanding. This, combined with his own abilities, means the ship doubles its value in boarding actions and gains an extra +1 Boarding modifier.

!!!Hit-&-Run Attacks 

Abaddon will have his own ship sealed tight against hit-&-run raiders (he knows every trick in the book). Therefore, hit-&-run raids deduct -1 from their dice roll against Abaddon’s ship. If Abaddon’s vessel makes any hit-&-run teleport attacks, add +1 to the dice roll for the attack as it will be undertaken by elite Black Legion Terminators. Boarding torpedoes and assault boats from Abaddon’s ship will be manned by more mundane minions and do not receive this modifier.

!!!“You have failed me for the last time…” 

Abaddon the Despoiler does not tolerate failure, as many of his followers have discovered to their cost. If Abaddon’s re-roll is used for a Command check or Leadership test on another ship or squadron and the test is failed a second time, he will become angry – very, very angry! In the Chaos Shooting phase Abaddon will direct at least half the available firepower and lance strength of the ship he is commanding against the weaklings who have failed him (assuming the worthless scum are within range and fire arc). Resolve the attack as normal, just as if Abaddon’s vessel were an enemy.

The victims of his wrath (assuming they survive) will be suitably chastised and gain a +1 Leadership increase for the remainder of the game. The Leadership bonus will only take effect once (after that the crews are working as hard as they can!). If the object of Abaddon’s wrath is not in range and/or fire arc he will leave them to their fate – Abaddon’s re-rolls may no longer be used on it. This means that no further Commander re-rolls may be used on the ship or squadron unless it is carrying its own Chaos Lord with a Mark of Tzeentch. 

Should this dreadful failure occur on Abaddon’s own ship, it will lose one Damage Point as the Black Legion massacre those who failed him. No Leadership increase is gained.
;Sector
:Agripinaa Secto







I don't show enough photographs of the 1/48 scale model aeroplanes that I have built and painted over the past three or so years. I am not a skilled model maker. I am still a kid inside when it comes to building these kits. I want them built and finished speedily. If I could get away with hanging them from the bedroom ceiling I would! I content myself with seeing them fly above the wargames table. I don't have an air brush or any of that fancy sort of technology so painting is done with brushes and acrylic paints. So, here is a Phonix DII (Special Hobby kit), a Roland CII (Eduard Weekender kit) and a monster Gotha GV (a vintage Aurora kit from the 1960s and 70s).





























































A customisable [[table of contents|Table-of-Contents Macros]] can be added to the sidebar with the following steps:

# Create a tiddler called [[TableOfContents]]
# Give it the tag ''~$:/tags/SideBar''
# Set the text to <div><pre><code><$text text="""
<div class="tc-table-of-contents">

<<toc-selective-expandable 'TableOfContents'>>

</div>"""/></code></pre></div>
# Add a ''caption'' field with the text ''Contents''
# Add a ''list-after'' field with the text ''~$:/core/ui/SideBar/Open''

Add entries to the table of contents by creating tiddlers tagged ''~TableOfContents''. An easy way is to choose {{$:/core/images/new-here-button}} ''new here'' from the tiddler toolbar. To create sub-entries, tag them with the name of the parent entry.
!Fleet Commander

;0-1 Mechanicus Archmagos

You may include 1 Mechanicus Archmagos in your fleet, which must be assigned to a capital ship and replaces its Leadership with the.' value shown. If the fleet is worth 1,000 points or more, a Mechanicus Archmagos must be included to lead it. A Mechanicus Archmagos must be embarked on an Ark Mechanicus iif one is included in the fleet.

|Archmagos Explorator (Ld 8) | 50 Points |
|Archmagos Veneratus (Ld 9) | 100 Points |

A Mechanicus Archmagos can elect up to any one desired item from the Adeptus Mechanicus refit table for their own ship as part of their point cost, in addition to (and before) the refit the ship rolls for normally. If the second refit rolled is identical to the one selected, the commander can select the second refit as well! The benefit a Mechanicus Archmagos brings with it cannot be combined with a refit selected because the ship rolled a 6 when determining base leadership, meaning in one-off games a ship will never have more than two refits from the Mechanicus Gifts table. If you wish to give a Mechanicus Archmagos any fleet commander re-rolls, you'll have to pay for them.

|One re-roll | 50 Points |
|Two re-rolls | 125 Points |

!Capital Ships

The Adeptus Mechanicus will only use warships from the following classes, applying all the rules described beforehand. The cost listed below replaces the original cost for these vessels found in the Rulebook or Armada when used as Adeptus Mechanicus ships. The Omnissiah's Victory may not take any Mechanicus Gifts refits, as its Mechanicus Gifts are already included in its point cost and special rules.

!!Battleships

You may include 1 battleship for every three cruisers in the fleet.

|(0-1) [[Omnissiah's Victory]] | 415 Points |
|[[Imperial Emperor Class Battleship]] | 400 Points |
|[[Imperial Retribution Class Battleship]] | 380 Points |
|[[Imperial Oberon Class Battleship]] | 370 Points |

!!Cruisers

You may have up to fifteen cruisers in the fleet.

|[[Imperial Dictator Class Cruiser]] | 255 Points |
|[[Imperial Tyrant Class Cruiser]] | 220 Points |
|[[Imperial Lunar Class Cruiser]] | 215 Points |
|[[Imperial Gothic Class Cruiser]] | 215 Points |
|[[Imperial Defiant Class Light Cruiser]] | 130 Points |
|[[Imperial Endeavor Class Light Cruiser]] | 125 Points |
|[[Imperial Endurance Class Light Cruiser]] | 125 Points |

!Escorts

You may have any number of Adeptus Mechanicus escorts in the fleet, taken from both the Imperial Navy and Space Marines fleet lists for the point costs listed below but otherwise unmodified from their normal profiles.

|[[Imperial Nova Class Frigate]] | 45 Points |
|[[Imperial Firestorm Class Frigate]] | 40 Points |
|[[Imperial Gladius Class Frigate]] | 40 Points |
|[[Imperial Sword Class Frigate]] | 35 Points |
|[[Imperial Falchion Class Frigate]] | 35 Points |
|[[Imperial Hunter Class Destroyer]] | 35 Points |
|[[Imperial Cobra Class Destroyer]] | 30 Points |

!Ordnance

Attack carriers may use any combination of Fury interceptors and Starhawk bombers. They may not use assault boats, even if their Imperial Navy counterparts may have access to this type of ordnance (such as Emperor battleships). Mechanicus vessels equipped with launch bays may also take torpedo bombers for +10 points per launch bay. All Adeptus Mechanicus capital ships that utilize torpedoes use ordinary torpedoes (not boarding torpedoes) and can be equipped with refitted torpedoes as described in their niles.
Look into using AHK to create a script that will let me press a key and then replicate the mouse clicks across all the screens.

I will need to use the Mouse with x, y coordinates and then cycle through all the named character windows to click repeat.

I will also need to delete the cache of the character screen setups and rename them with my lead character to ensure that they are all the same.

<td bgcolor=358578 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue-Green''<br>&emsp;AK Interactive<br>&emsp;AK11169
<td bgcolor=2E993B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Olivgrün Light''<br>&emsp;AK Interactive<br>&emsp;AK1173
<td bgcolor=6E5D41 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''WWI British Khaki Brown Highlights''<br>&emsp;AK Interactive<br>&emsp;AK4041
;Paint Names
<<list-links "[library[AK Interactive]sort[title]]">>
@@.image-float-left
[img[Alone Among the Stars.20201002]]
@@<br>



A tabletop roleplaying game about exploring space and experiencing wondrous sights. Uses a standard 52 card deck and a six-sided die. For 1+ players.

I heard about this game through the [[1-Player Podcast]]. I sent a copy to Claire for her to look at and try.

<div style="clear: both;">

---
;Source
:https://www.artmasterstudio.co.uk/prices


;Skill Plan
```
Advanced Drone Avionics 1
Afterburner 3
Amarr Cruiser 5
Amarr Destroyer 3
Amarr Frigate 3
CPU Management 3
Capacitor Emission Systems 3
Capacitor Management 4
Drones 5
Electronic Warfare 4
Energy Grid Upgrades 5
Gallente Drone Specialization 1
Gunnery 2
Heavy Assault Cruisers 1
Heavy Assault Missile Specialization 1
Heavy Assault Missiles 5
High Speed Maneuvering 4
Hull Upgrades 5
Light Drone Operation 5
Light Missiles 3
Mechanics 1
Medium Drone Operation 5
Missile Bombardment 4
Missile Launcher Operation 4
Navigation 3
Power Grid Management 3
Propulsion Jamming 2
Science 2
Spaceship Command 5
Weapon Upgrades 5
Diplomacy I
Drone Navigation I
Negotiation I
Mining Connections I
Distribution Connections I
Security Connections I
Electronics Upgrades I
Shield Compensation I
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
Magnetometric Sensor Compensation I
Mining Foreman I
Mining Drone Operation I
Fuel Conservation I
Connections I
Criminal Connections I
Armor Layering I
Fast Talk I
Acceleration Control I
ORE Industrial I
Diplomacy II
Minmatar Drone Specialization I
Caldari Drone Specialization I
Command Burst Specialist I
Drone Navigation II
Advanced Weapon Upgrades I
Negotiation II
Mining Connections II
Distribution Connections II
Security Connections II
Electronics Upgrades II
Shield Compensation II
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
Magnetometric Sensor Compensation II
Mining Foreman II
Mining Drone Operation II
Fuel Conservation II
Connections II
Criminal Connections II
Armor Layering II
Salvage Drone Operation II
Fast Talk II
Acceleration Control II
Drone Durability II
Amarr Drone Specialization II
Gallente Drone Specialization II
Advanced Drone Avionics II
Sentry Drone Interfacing II
ORE Industrial II
Diplomacy III
Minmatar Drone Specialization II
Caldari Drone Specialization II
Command Burst Specialist II
Drone Navigation III
Advanced Weapon Upgrades II
Negotiation III
Mining Connections III
Distribution Connections III
Security Connections III
Electronics Upgrades III
Shield Compensation III
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
Magnetometric Sensor Compensation III
Mining Foreman III
Mining Drone Operation III
Fuel Conservation III
Connections III
Criminal Connections III
Armor Layering III
Fast Talk III
Salvage Drone Operation III
Acceleration Control III
Gas Cloud Harvesting IV
ORE Industrial III
Drone Durability III
Amarr Drone Specialization III
Gallente Drone Specialization III
Advanced Drone Avionics III
Sentry Drone Interfacing III
Diplomacy IV
Minmatar Drone Specialization III
Caldari Drone Specialization III
Command Burst Specialist III
Drone Navigation IV
Advanced Weapon Upgrades III
Negotiation IV
Mining Connections IV
Distribution Connections IV
Security Connections IV
Electronics Upgrades IV
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Compensation IV
Magnetometric Sensor Compensation IV
Mining Foreman IV
Mining Drone Operation IV
Fuel Conservation IV
Connections IV
Criminal Connections IV
Armor Layering IV
Fast Talk IV
Salvage Drone Operation IV
Acceleration Control IV
Social V
High Speed Maneuvering IV
Ice Harvesting V
Repair Systems V
Deep Core Mining IV
Afterburner V
Drone Durability IV
Amarr Drone Specialization IV
Gallente Drone Specialization IV
Advanced Drone Avionics IV
Sentry Drone Interfacing IV
Diplomacy V
Minmatar Drone Specialization IV
Caldari Drone Specialization IV
Gas Cloud Harvesting V
Command Burst Specialist IV
Drone Navigation V
Advanced Weapon Upgrades IV
Heavy Drone Operation V
Negotiation V
Mining Connections V
Distribution Connections V
Security Connections V
Weapon Upgrades V
Electronics Upgrades V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Compensation V
Magnetometric Sensor Compensation V
Mining Foreman V
Mining Director I
Industrial Command Ships I
Mining Director II
Mining Director III
Mining Director IV
Mining Drone Operation V
Fuel Conservation V
Connections V
Criminal Connections V
Armor Layering V
Fast Talk V
Salvage Drone Operation V
Acceleration Control V
Drone Interfacing V
Mining Director V
High Speed Maneuvering V
Amarr Drone Specialization V
Gallente Drone Specialization V
Advanced Drone Avionics V
Sentry Drone Interfacing V
Drone Durability V
Minmatar Drone Specialization V
Caldari Drone Specialization V
Deep Core Mining V
Command Burst Specialist V
Advanced Weapon Upgrades V
Advanced Planetology I
Advanced Planetology II
Advanced Planetology III
Remote Sensing V
Advanced Planetology IV
Planetology V
Interplanetary Consolidation V
Command Center Upgrades V
Advanced Planetology V
Resistance Phasing I
Advanced Spaceship Command I
Capital Repair Systems I
Capital Shield Operation I
Resistance Phasing II
Micro Jump Drive Operation II
Advanced Spaceship Command II
Capital Repair Systems II
Capital Shield Operation II
Resistance Phasing III
Micro Jump Drive Operation III
Advanced Spaceship Command III
Capital Repair Systems III
Capital Shield Operation III
Resistance Phasing IV
Micro Jump Drive Operation IV
Advanced Spaceship Command IV
Capital Repair Systems IV
Capital Shield Operation IV
Resistance Phasing V
Micro Jump Drive Operation V
Advanced Spaceship Command V
Capital Ships I
Capital Ships II
Capital Ships III
Capital Ships IV
Capital Repair Systems V
Capital Shield Operation V
Capital Ships V
```

Check to see if the ''Make Titles Links'' will make all phrases matching title names into auto links.

Auto Linking
@@.image-float-left

@@<br>

;A useful plugin at this website.
:https://danielorodriguez.com/TW5-AutoTag/

<div style="clear: both;">

---
;Todo
:Look to buy to clean and maintain airbrush.
|!Bakara’s Chariot |<|<|!Armament |!Range<br>Speed|!Firepower<br>Strength|!Fire Arc|
|!Type |Cruiser/8|^[img height=200 [Bakara’s Chariot.image]] |!Port Ion Cannon | 30cm | 2 | Left |
|!Hits |Cruiser/8|~|!Starboard Ion Cannon | 30cm | 2 | Right |
|!Speed |30cm|~|!Port Weapons Battery | 30cm | 6 | Left |
|!Turns |45'|~|^!Starboard Weapons Battery |^ 30cm |^ 6 |^ Right |
|!Shields |3|~|~|~|~|~|
|!Armor |5+|~|~|~|~|~|
|!Turrets |2|~|~|~|~|~|

Despite an extensive refit the overall structure of Bakara's chariot is the same as a Lunar Class Cruiser. The high powered Tau engines allow for impressive speeds yet the original ship structure prevents the ship performing high speed manoeuvres. For this reason Bakara's Chariot cannot use the Come to New Heading Special Order.

Bakara's chariot may be included in a Tau or Imperial Fleet (not space marine). However due to treacherous nature of the ship and its crew a command check must be performed at the beginning of each turn. If the check is failed Bakara's decides continued cooperation is too risky and flees the sector. Bakara's chariot is removed from the table; it does not count as a casualty for victory purposes.

Though his earliest origins are unknown the infamous raider Xin Bakara rose through the ranks of the Tau empire as a Gue'vesa. Despite his leadership ability and prowess with the xeno's technology Bakara found little gratification in fighting for the greater good. An opportunity came for Bakara to abandon his post when the Merchant Class Starship he was on was caught in a warp storm. Killing most of the crew and critically damaging the ship the warp storm was perfect cover for Bakara's escape. Stealing an Orca Gunship Bakara fled Tau space and found himself indulging in a life of piracy around the eastern fringe.

In a bold move that still infuriates the Admiralty of Battlefleet Ultima to this very day, Bakara and his reavers of renegade human and Tau traitors and desperados, brazenly captured an old and damaged Lunar Class Cruiser named //The Spear of Justice// from the Kystas Hold orbital docks. Bakara then raided a series of freighters and trade ships with his barely space worthy vessel.

From the plunder Bakara extensively upgraded The Spear of Justice drawing on his knowledge of Tau technology. Stripping the torpedo tubes in favour of extra generators to power his alien technologies, The Spear of Justice more resembled a Tau vessel than one of Imperium of Mankind. Proud of his work Bakara renamed his vessel Bakara's Chariot removing the name given by the Imperium. Equipped with his chariot Bakara soon became notorious raiding hundreds of vessels across the eastern frontier. Plundering ships from edges of the Imperium to well beyond the Tau Empire, Bakara's Chariot has become a feared sight throughout the galaxy.



  <link crossorigin="anonymous" media="all" integrity="sha512-QV1ZNBjZz8stPx+uh4ZAKc6AJ1z8A9VHut/SGtgbc+iYLfhrh68QmDH3rZgkXJ0BWIOcDw+ILnWcctH0ljcHPg==" rel="stylesheet" href="https://github.githubassets.com/assets/frameworks-415d593418d9cfcb2d3f1fae87864029.css" />
  <link crossorigin="anonymous" media="all" integrity="sha512-0TfsxX6InRFol+EYz4NB5XBB723w2mJIM2X5LR3KL3js6VO2nyZugaJnqRww1ioyTEYlCi/jYHkbLGrNEYLjIw==" rel="stylesheet" href="https://github.githubassets.com/assets/site-d137ecc57e889d116897e118cf8341e5.css" />
    <link crossorigin="anonymous" media="all" integrity="sha512-xGFdZUKK/onhRqT6o59o2xm+CbVkziehu3nWHXh3Es1mnZ1O5//h814bwszrOvVazsMd2gGccpTjBoH9bApQ7g==" rel="stylesheet" href="https://github.githubassets.com/assets/github-c4615d65428afe89e146a4faa39f68db.css" />
    
    
    
    


  <meta name="viewport" content="width=device-width">
  
  <title>TiddlyWiki5/base.tid at master · Jermolene/TiddlyWiki5 · GitHub</title>
    <meta name="description" content="A self-contained JavaScript wiki for the browser, Node.js, AWS Lambda etc. - Jermolene/TiddlyWiki5">
    <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
  <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
  <meta property="fb:app_id" content="1401488693436528">
  <meta name="apple-itunes-app" content="app-id=1477376905">

    <meta name="twitter:image:src" content="https://repository-images.githubusercontent.com/2828239/26e9ed00-7330-11e9-8e1b-db115d3248f9" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="Jermolene/TiddlyWiki5" /><meta name="twitter:description" content="A self-contained JavaScript wiki for the browser, Node.js, AWS Lambda etc. - Jermolene/TiddlyWiki5" />
    <meta property="og:image" content="https://repository-images.githubusercontent.com/2828239/26e9ed00-7330-11e9-8e1b-db115d3248f9" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="Jermolene/TiddlyWiki5" /><meta property="og:url" content="https://github.com/Jermolene/TiddlyWiki5" /><meta property="og:description" content="A self-contained JavaScript wiki for the browser, Node.js, AWS Lambda etc. - Jermolene/TiddlyWiki5" />



  

  <link rel="assets" href="https://github.githubassets.com/">
  

  <meta name="request-id" content="E402:4530:96E71D:10869FD:5F84DE91" data-pjax-transient="true"/><meta name="html-safe-nonce" content="e7a90c7c57434d15c995b81212556a27ada3bf73" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6Imh0dHBzOi8vZ2l0aHViLmNvbS9KZXJtb2xlbmUvVGlkZGx5V2lraTUvdHJlZS9tYXN0ZXIvdGhlbWVzL3RpZGRseXdpa2kvc2VhbWxlc3MiLCJyZXF1ZXN0X2lkIjoiRTQwMjo0NTMwOjk2RTcxRDoxMDg2OUZEOjVGODRERTkxIiwidmlzaXRvcl9pZCI6Ijk0NTkyMDQxNjMwMjEwODQzOCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="19736a04f9e11ac774bc63a59c9b5a4041b681227c43e78aab433ecf405305e8" data-pjax-transient="true"/><meta name="cookie-consent-required" content="false" data-pjax-transient="true"/>

    <meta name="hovercard-subject-tag" content="repository:2828239" data-pjax-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code" data-pjax-transient="true" />

  

  <meta name="selected-link" value="repo_source" data-pjax-transient>

    <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY">
  <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
  <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
  <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc">

  <meta name="octolytics-host" content="collector.githubapp.com" /><meta name="octolytics-app-id" content="github" /><meta name="octolytics-event-url" content="https://collector.githubapp.com/github-external/browser_event" /><meta name="octolytics-dimension-ga_id" content="" class="js-octo-ga-id" />

  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" />

  







<meta class="js-ga-set" name="dimension10" content="Responsive" data-pjax-transient>

<meta class="js-ga-set" name="dimension1" content="Logged Out">



  

      <meta name="hostname" content="github.com">
    <meta name="user-login" content="">


      <meta name="expected-hostname" content="github.com">


    <meta name="enabled-features" content="MARKETPLACE_PENDING_INSTALLATIONS">

  <meta http-equiv="x-pjax-version" content="e7188e69867cd35e131cc3bfc6d0aa14bc798308906964b75612d0e2084a5eb0">
  

        <link href="https://github.com/Jermolene/TiddlyWiki5/commits/master.atom" rel="alternate" title="Recent Commits to TiddlyWiki5:master" type="application/atom+xml">

  <meta name="go-import" content="github.com/Jermolene/TiddlyWiki5 git https://github.com/Jermolene/TiddlyWiki5.git">

  <meta name="octolytics-dimension-user_id" content="174761" /><meta name="octolytics-dimension-user_login" content="Jermolene" /><meta name="octolytics-dimension-repository_id" content="2828239" /><meta name="octolytics-dimension-repository_nwo" content="Jermolene/TiddlyWiki5" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="2828239" /><meta name="octolytics-dimension-repository_network_root_nwo" content="Jermolene/TiddlyWiki5" /><meta name="octolytics-dimension-repository_explore_github_marketplace_ci_cta_shown" content="false" />


    <link rel="canonical" href="https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid" data-pjax-transient>


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">

  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg">

<meta name="theme-color" content="#1e2327">


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive page-blob">
    

    <div class="position-relative js-header-wrapper ">
      <a href="#start-of-content" class="px-2 py-4 bg-blue text-white show-on-focus js-skip-to-content">Skip to content</a>
      <span class="progress-pjax-loader width-full js-pjax-loader-bar Progress position-fixed">
    <span style="background-color: #79b8ff;width: 0%;" class="Progress-item progress-pjax-loader-bar "></span>
</span>      
      


          <header class="Header-old header-logged-out js-details-container Details position-relative f4 py-2" role="banner">
  <div class="container-xl d-lg-flex flex-items-center p-responsive">
    <div class="d-flex flex-justify-between flex-items-center">
        <a class="mr-4" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
          <svg height="32" class="octicon octicon-mark-github text-white" viewBox="0 0 16 16" version="1.1" width="32" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg>
        </a>

          <div class="d-lg-none css-truncate css-truncate-target width-fit p-2">
            

          </div>

        <div class="d-flex flex-items-center">
              <a href="/join?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo"
                class="d-inline-block d-lg-none f5 text-white no-underline border border-gray-dark rounded-2 px-2 py-1 mr-3 mr-sm-5"
                data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="0884f38827e85b889bfc66efe18ccb71108cba445616ed67b5e82d8eed445add"
                data-ga-click="Sign up, click to sign up for account, ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show;ref_cta:Sign up;ref_loc:header logged out">
                Sign&nbsp;up
              </a>

          <button class="btn-link d-lg-none mt-1 js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
            <svg height="24" class="octicon octicon-three-bars text-white" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path></svg>
          </button>
        </div>
    </div>

    <div class="HeaderMenu HeaderMenu--logged-out position-fixed top-0 right-0 bottom-0 height-fit position-lg-relative d-lg-flex flex-justify-between flex-items-center flex-auto">
      <div class="d-flex d-lg-none flex-justify-end border-bottom bg-gray-light p-3">
        <button class="btn-link js-details-target" type="button" aria-label="Toggle navigation" aria-expanded="false">
          <svg height="24" class="octicon octicon-x text-gray" viewBox="0 0 24 24" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M5.72 5.72a.75.75 0 011.06 0L12 10.94l5.22-5.22a.75.75 0 111.06 1.06L13.06 12l5.22 5.22a.75.75 0 11-1.06 1.06L12 13.06l-5.22 5.22a.75.75 0 01-1.06-1.06L10.94 12 5.72 6.78a.75.75 0 010-1.06z"></path></svg>
        </button>
      </div>

        <nav class="mt-0 px-3 px-lg-0 mb-5 mb-lg-0" aria-label="Global">
          <ul class="d-lg-flex list-style-none">
              <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
                <details class="HeaderMenu-details details-overlay details-reset width-full">
                  <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
                    Why GitHub?
                    <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
                      <path d="M1,1l6.2,6L13,1"></path>
                    </svg>
                  </summary>
                  <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
                    <a href="/features" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Features">Features <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>
                    <ul class="list-style-none f5 pb-3">
                      <li class="edge-item-fix"><a href="/features/code-review/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code review">Code review</a></li>
                      <li class="edge-item-fix"><a href="/features/project-management/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Project management">Project management</a></li>
                      <li class="edge-item-fix"><a href="/features/integrations" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Integrations">Integrations</a></li>
                      <li class="edge-item-fix"><a href="/features/actions" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Actions">Actions</a></li>
                      <li class="edge-item-fix"><a href="/features/packages" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Packages">Packages</a></li>
                      <li class="edge-item-fix"><a href="/features/security" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Security">Security</a></li>
                      <li class="edge-item-fix"><a href="/features#team-management" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Team management">Team management</a></li>
                      <li class="edge-item-fix"><a href="/features#hosting" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Code hosting">Hosting</a></li>
                      <li class="edge-item-fix hide-xl"><a href="/mobile" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Mobile">Mobile</a></li>
                    </ul>

                    <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
                      <li class="edge-item-fix"><a href="/customer-stories" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Customer stories">Customer stories <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
                      <li class="edge-item-fix"><a href="/security" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Security">Security <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
                    </ul>
                  </div>
                </details>
              </li>
              <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
                <a href="/team" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Team">Team</a>
              </li>
              <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
                <a href="/enterprise" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Enterprise">Enterprise</a>
              </li>

              <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
                <details class="HeaderMenu-details details-overlay details-reset width-full">
                  <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
                    Explore
                    <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
                      <path d="M1,1l6.2,6L13,1"></path>
                    </svg>
                  </summary>

                  <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-0 mt-0 pb-4 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
                    <ul class="list-style-none mb-3">
                      <li class="edge-item-fix"><a href="/explore" class="py-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Explore">Explore GitHub <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
                    </ul>

                    <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Learn &amp; contribute</h4>
                    <ul class="list-style-none mb-3">
                      <li class="edge-item-fix"><a href="/topics" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Topics">Topics</a></li>
                        <li class="edge-item-fix"><a href="/collections" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Collections">Collections</a></li>
                      <li class="edge-item-fix"><a href="/trending" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Trending">Trending</a></li>
                      <li class="edge-item-fix"><a href="https://lab.github.com/" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Learning lab">Learning Lab</a></li>
                      <li class="edge-item-fix"><a href="https://opensource.guide" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Open source guides">Open source guides</a></li>
                    </ul>

                    <h4 class="text-gray-light text-normal text-mono f5 mb-2 border-lg-top pt-lg-3">Connect with others</h4>
                    <ul class="list-style-none mb-0">
                      <li class="edge-item-fix"><a href="https://github.com/events" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Events">Events</a></li>
                      <li class="edge-item-fix"><a href="https://github.community" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Community forum">Community forum</a></li>
                      <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Education">GitHub Education</a></li>
                      <li class="edge-item-fix"><a href="https://stars.github.com" class="py-2 pb-0 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to GitHub Stars Program">GitHub Stars program</a></li>
                    </ul>
                  </div>
                </details>
              </li>

              <li class="border-bottom border-lg-bottom-0 mr-0 mr-lg-3">
                <a href="/marketplace" class="HeaderMenu-link no-underline py-3 d-block d-lg-inline-block" data-ga-click="(Logged out) Header, go to Marketplace">Marketplace</a>
              </li>

              <li class="d-block d-lg-flex flex-lg-nowrap flex-lg-items-center border-bottom border-lg-bottom-0 mr-0 mr-lg-3 edge-item-fix position-relative flex-wrap flex-justify-between d-flex flex-items-center ">
                <details class="HeaderMenu-details details-overlay details-reset width-full">
                  <summary class="HeaderMenu-summary HeaderMenu-link px-0 py-3 border-0 no-wrap d-block d-lg-inline-block">
                    Pricing
                    <svg x="0px" y="0px" viewBox="0 0 14 8" xml:space="preserve" fill="none" class="icon-chevon-down-mktg position-absolute position-lg-relative">
                       <path d="M1,1l6.2,6L13,1"></path>
                    </svg>
                  </summary>

                  <div class="dropdown-menu flex-auto rounded-1 bg-white px-0 pt-2 pb-4 mt-0 p-lg-4 position-relative position-lg-absolute left-0 left-lg-n4">
                    <a href="/pricing" class="pb-2 lh-condensed-ultra d-block link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Pricing">Plans <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a>

                    <ul class="list-style-none mb-3">
                      <li class="edge-item-fix"><a href="/pricing#feature-comparison" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Compare plans">Compare plans</a></li>
                      <li class="edge-item-fix"><a href="https://enterprise.github.com/contact" class="py-2 lh-condensed-ultra d-block link-gray no-underline f5" data-ga-click="(Logged out) Header, go to Contact Sales">Contact Sales</a></li>
                    </ul>

                    <ul class="list-style-none mb-0 border-lg-top pt-lg-3">
                      <li class="edge-item-fix"><a href="/nonprofit" class="py-2 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover" data-ga-click="(Logged out) Header, go to Nonprofits">Nonprofit <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
                      <li class="edge-item-fix"><a href="https://education.github.com" class="py-2 pb-0 lh-condensed-ultra d-block no-underline link-gray-dark no-underline h5 Bump-link--hover"  data-ga-click="(Logged out) Header, go to Education">Education <span class="Bump-link-symbol float-right text-normal text-gray-light">&rarr;</span></a></li>
                    </ul>
                  </div>
                </details>
              </li>
          </ul>
        </nav>

      <div class="d-lg-flex flex-items-center px-3 px-lg-0 text-center text-lg-left">
          <div class="d-lg-flex mb-3 mb-lg-0">
              <div class="header-search header-search-current js-header-search-current flex-auto js-site-search position-relative flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to js-header-search-current-jump-to"
  role="combobox"
  aria-owns="jump-to-results"
  aria-label="Search or jump to"
  aria-haspopup="listbox"
  aria-expanded="false"
>
  <div class="position-relative">
    <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="2828239" data-scoped-search-url="/Jermolene/TiddlyWiki5/search" data-unscoped-search-url="/search" action="/Jermolene/TiddlyWiki5/search" accept-charset="UTF-8" method="get">
      <label class="form-control input-sm header-search-wrapper p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center">
        <input type="text"
          class="form-control input-sm header-search-input jump-to-field js-jump-to-field js-site-search-focus js-site-search-field is-clearable"
          data-hotkey="s,/"
          name="q"
          value=""
          placeholder="Search"
          data-unscoped-placeholder="Search GitHub"
          data-scoped-placeholder="Search"
          autocapitalize="off"
          aria-autocomplete="list"
          aria-controls="jump-to-results"
          aria-label="Search"
          data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations"
          spellcheck="false"
          autocomplete="off"
          >
          <input type="hidden" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" value="SoqYZGDryqcVdf5VSlUA19a5jmV5Op7/j1GhrCbHDxQyJDRaAkY0zkSItWlCQwaoFyCFRPIhHByaFCeg+I41nw==" />
          <input type="hidden" class="js-site-search-type-field" name="type" >
            <img src="https://github.githubassets.com/images/search-key-slash.svg" alt="" class="mr-2 header-search-key-slash">

            <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container">
              
<ul class="d-none js-jump-to-suggestions-template-container">
  

<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option">
  <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
    <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
      <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
      <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
      <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
    </div>

    <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">

    <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
    </div>

    <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
      <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
        In this repository
      </span>
      <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
        All GitHub
      </span>
      <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
    </div>

    <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
      Jump to
      <span class="d-inline-block ml-1 v-align-middle">↵</span>
    </div>
  </a>
</li>

</ul>

<ul class="d-none js-jump-to-no-results-template-container">
  <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2">
    <span class="text-gray">No suggested jump to results</span>
  </li>
</ul>

<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container">
  

<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option">
  <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
    <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
      <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
      <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
      <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
    </div>

    <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">

    <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
    </div>

    <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
      <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
        In this repository
      </span>
      <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
        All GitHub
      </span>
      <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
    </div>

    <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
      Jump to
      <span class="d-inline-block ml-1 v-align-middle">↵</span>
    </div>
  </a>
</li>

  

<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option">
  <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="">
    <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none">
      <svg height="16" width="16" class="octicon octicon-repo flex-shrink-0 js-jump-to-octicon-repo d-none" title="Repository" aria-label="Repository" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
      <svg height="16" width="16" class="octicon octicon-project flex-shrink-0 js-jump-to-octicon-project d-none" title="Project" aria-label="Project" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
      <svg height="16" width="16" class="octicon octicon-search flex-shrink-0 js-jump-to-octicon-search d-none" title="Search" aria-label="Search" viewBox="0 0 16 16" version="1.1" role="img"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg>
    </div>

    <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28">

    <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target">
    </div>

    <div class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none js-jump-to-badge-search">
      <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository">
        In this repository
      </span>
      <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub">
        All GitHub
      </span>
      <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span>
    </div>

    <div aria-hidden="true" class="border rounded-1 flex-shrink-0 bg-gray px-1 text-gray-light ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump">
      Jump to
      <span class="d-inline-block ml-1 v-align-middle">↵</span>
    </div>
  </a>
</li>


</ul>

            </div>
      </label>
</form>  </div>
</div>

          </div>

        <a href="/login?return_to=%2FJermolene%2FTiddlyWiki5%2Fblob%2Fmaster%2Fthemes%2Ftiddlywiki%2Fseamless%2Fbase.tid"
          class="HeaderMenu-link no-underline mr-3"
          data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="059d86845fad3df613dad65f8f74150212982248abe5e590abba450144e3a7e2"
          data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">
          Sign&nbsp;in
        </a>
            <a href="/join?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=Jermolene%2FTiddlyWiki5"
              class="HeaderMenu-link d-inline-block no-underline border border-gray-dark rounded-1 px-2 py-1"
              data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="059d86845fad3df613dad65f8f74150212982248abe5e590abba450144e3a7e2"
              data-ga-click="Sign up, click to sign up for account, ref_page:/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show;ref_cta:Sign up;ref_loc:header logged out">
              Sign&nbsp;up
            </a>
      </div>
    </div>
  </div>
</header>

    </div>

  <div id="start-of-content" class="show-on-focus"></div>





    <div data-pjax-replace id="js-flash-container">


  <template class="js-flash-template">
    <div class="flash flash-full  {{ className }}">
  <div class=" px-2" >
    <button class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
    </button>
    
      <div>{{ message }}</div>

  </div>
</div>
  </template>
</div>


  

  <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment>



  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main  >
      

    






  


  <div class="bg-gray-light pt-3 hide-full-screen mb-5">

      <div class="d-flex mb-3 px-3 px-md-4 px-lg-5">

        <div class="flex-auto min-width-0 width-fit mr-3">
            <h1 class=" d-flex flex-wrap flex-items-center break-word f3 text-normal">
    <svg class="octicon octicon-repo text-gray mr-2" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path></svg>
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/Jermolene/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/Jermolene">Jermolene</a>
    </span>
    <span class="mx-1 flex-self-stretch">/</span>
  <strong itemprop="name" class="mr-2 flex-self-stretch">
    <a data-pjax="#js-repo-pjax-container" class="" href="/Jermolene/TiddlyWiki5">TiddlyWiki5</a>
  </strong>
  
</h1>


        </div>

          <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">

  <li>
          <a class="tooltipped tooltipped-s btn btn-sm btn-with-count" aria-label="You must be signed in to watch a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="6f4faed69635309dcb14127b99cea0fd596a68b99f803526eef06924046766b4" href="/login?return_to=%2FJermolene%2FTiddlyWiki5">
    <svg height="16" class="octicon octicon-eye" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path></svg>
    Watch
</a>    <a class="social-count" href="/Jermolene/TiddlyWiki5/watchers"
       aria-label="254 users are watching this repository">
      254
    </a>

  </li>

  <li>
          <a class="btn btn-sm btn-with-count  tooltipped tooltipped-s" aria-label="You must be signed in to star a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:2828239,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="88f7911f76c4cf2ffe902dbb19c720a032ee5eb7f54ded27f181ebf0445db9d8" href="/login?return_to=%2FJermolene%2FTiddlyWiki5">
      <svg vertical_align="text_bottom" height="16" class="octicon octicon-star v-align-text-bottom" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path></svg>
      Star
</a>
    <a class="social-count js-social-count" href="/Jermolene/TiddlyWiki5/stargazers"
      aria-label="5272 users starred this repository">
      5.3k
    </a>

  </li>

  <li>
        <a class="btn btn-sm btn-with-count tooltipped tooltipped-s" aria-label="You must be signed in to fork a repository" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:2828239,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="49a5f9f2a9435db0b8f159e44a83db7bbb6c1307e5d2d9fe4821a8c65802e4c8" href="/login?return_to=%2FJermolene%2FTiddlyWiki5">
          <svg class="octicon octicon-repo-forked" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path></svg>
          Fork
</a>
      <a href="/Jermolene/TiddlyWiki5/network/members" class="social-count"
         aria-label="917 users forked this repository">
        917
      </a>
  </li>
</ul>

      </div>
        
<nav aria-label="Repository" data-pjax="#js-repo-pjax-container" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5 bg-gray-light">
  <ul class="UnderlineNav-body list-style-none ">
          <li class="d-flex">
        <a class="js-selected-navigation-item selected UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="code-tab" data-hotkey="g c" data-ga-click="Repository, Navigation click, Code tab" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /Jermolene/TiddlyWiki5" href="/Jermolene/TiddlyWiki5">
              <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path></svg>
            <span data-content="Code">Code</span>
              <span title="Not available" class="Counter "></span>
</a>      </li>
      <li class="d-flex">
        <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="issues-tab" data-hotkey="g i" data-ga-click="Repository, Navigation click, Issues tab" data-selected-links="repo_issues repo_labels repo_milestones /Jermolene/TiddlyWiki5/issues" href="/Jermolene/TiddlyWiki5/issues">
              <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm9 3a1 1 0 11-2 0 1 1 0 012 0zm-.25-6.25a.75.75 0 00-1.5 0v3.5a.75.75 0 001.5 0v-3.5z"></path></svg>
            <span data-content="Issues">Issues</span>
              <span title="893" class="Counter ">893</span>
</a>      </li>
      <li class="d-flex">
        <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="pull-requests-tab" data-hotkey="g p" data-ga-click="Repository, Navigation click, Pull requests tab" data-selected-links="repo_pulls checks /Jermolene/TiddlyWiki5/pulls" href="/Jermolene/TiddlyWiki5/pulls">
              <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path></svg>
            <span data-content="Pull requests">Pull requests</span>
              <span title="132" class="Counter ">132</span>
</a>      </li>
      <li class="d-flex">
        <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="actions-tab" data-hotkey="g a" data-ga-click="Repository, Navigation click, Actions tab" data-selected-links="repo_actions /Jermolene/TiddlyWiki5/actions" href="/Jermolene/TiddlyWiki5/actions">
              <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path></svg>
            <span data-content="Actions">Actions</span>
              <span title="Not available" class="Counter "></span>
</a>      </li>
      <li class="d-flex">
        <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="projects-tab" data-hotkey="g b" data-ga-click="Repository, Navigation click, Projects tab" data-selected-links="repo_projects new_repo_project repo_project /Jermolene/TiddlyWiki5/projects" href="/Jermolene/TiddlyWiki5/projects">
              <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-project UnderlineNav-octicon d-none d-sm-inline" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path></svg>
            <span data-content="Projects">Projects</span>
              <span title="0" hidden="hidden" class="Counter ">0</span>
</a>      </li>
      <li class="d-flex">
        <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="security-tab" data-hotkey="g s" data-ga-click="Repository, Navigation click, Security tab" data-selected-links="security overview alerts policy token_scanning code_scanning /Jermolene/TiddlyWiki5/security" href="/Jermolene/TiddlyWiki5/security">
              <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path></svg>
            <span data-content="Security">Security</span>
              <include-fragment src="/Jermolene/TiddlyWiki5/security/overall-count" accept="text/fragment+html"></include-fragment>
</a>      </li>
      <li class="d-flex">
        <a class="js-selected-navigation-item UnderlineNav-item hx_underlinenav-item no-wrap js-responsive-underlinenav-item" data-tab-item="insights-tab" data-ga-click="Repository, Navigation click, Insights tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people /Jermolene/TiddlyWiki5/pulse" href="/Jermolene/TiddlyWiki5/pulse">
              <svg classes="UnderlineNav-octicon" display="none inline" height="16" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path></svg>
            <span data-content="Insights">Insights</span>
              <span title="Not available" class="Counter "></span>
</a>      </li>

</ul>        <div class="position-absolute right-0 pr-3 pr-md-4 pr-lg-5 js-responsive-underlinenav-overflow" style="visibility:hidden;">
      <details class="details-overlay details-reset position-relative">
  <summary role="button">
    <div class="UnderlineNav-item mr-0 border-0">
            <svg class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
            <span class="sr-only">More</span>
          </div>
</summary>  <div>
    <details-menu role="menu" class="dropdown-menu dropdown-menu-sw ">
  
            <ul>
                <li data-menu-item="code-tab" hidden>
                  <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /Jermolene/TiddlyWiki5" href="/Jermolene/TiddlyWiki5">
                    Code
</a>                </li>
                <li data-menu-item="issues-tab" hidden>
                  <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /Jermolene/TiddlyWiki5/issues" href="/Jermolene/TiddlyWiki5/issues">
                    Issues
</a>                </li>
                <li data-menu-item="pull-requests-tab" hidden>
                  <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /Jermolene/TiddlyWiki5/pulls" href="/Jermolene/TiddlyWiki5/pulls">
                    Pull requests
</a>                </li>
                <li data-menu-item="actions-tab" hidden>
                  <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /Jermolene/TiddlyWiki5/actions" href="/Jermolene/TiddlyWiki5/actions">
                    Actions
</a>                </li>
                <li data-menu-item="projects-tab" hidden>
                  <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /Jermolene/TiddlyWiki5/projects" href="/Jermolene/TiddlyWiki5/projects">
                    Projects
</a>                </li>
                <li data-menu-item="security-tab" hidden>
                  <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /Jermolene/TiddlyWiki5/security" href="/Jermolene/TiddlyWiki5/security">
                    Security
</a>                </li>
                <li data-menu-item="insights-tab" hidden>
                  <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links=" /Jermolene/TiddlyWiki5/pulse" href="/Jermolene/TiddlyWiki5/pulse">
                    Insights
</a>                </li>
            </ul>

</details-menu>
</div></details>    </div>

</nav>
  </div>


<div class="container-xl clearfix new-discussion-timeline px-3 px-md-4 px-lg-5">
  <div class="repository-content " >

    
      
  


    <a class="d-none js-permalink-shortcut" data-hotkey="y" href="/Jermolene/TiddlyWiki5/blob/34a51d2e239c8d200f8b79a85aae1e651f016d79/themes/tiddlywiki/seamless/base.tid">Permalink</a>

    <!-- blob contrib key: blob_contributors:v22:d72de22f961fa03d6b0109279b61861055b7f9954b6c8f4c3242dccbf6de721d -->
      <signup-prompt class="signup-prompt-bg rounded-1" data-prompt="signup" hidden>
    <div class="signup-prompt p-4 text-center mb-4 rounded-1">
      <div class="position-relative">
        <button
          type="button"
          class="position-absolute top-0 right-0 btn-link link-gray"
          data-action="click:signup-prompt#dismiss"
          data-ga-click="(Logged out) Sign up prompt, clicked Dismiss, text:dismiss"
        >
          Dismiss
        </button>
        <h3 class="pt-2">Join GitHub today</h3>
        <p class="col-6 mx-auto">GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.</p>
        <a class="btn btn-primary" data-ga-click="(Logged out) Sign up prompt, clicked Sign up, text:sign-up" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;files signup prompt&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="b7ddcc5e6dcc30cf80593da7e1c09130c0d77efd0905c419257b169b8b57e533" href="/join?source=prompt-blob-show&amp;source_repo=Jermolene%2FTiddlyWiki5">Sign up</a>
      </div>
    </div>
  </signup-prompt>


    <div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-wrap flex-md-nowrap flex-justify-between flex-md-justify-start">
      
<div class="position-relative">
  <details class="details-reset details-overlay mr-0 mb-0 " id="branch-select-menu">
    <summary class="btn css-truncate"
            data-hotkey="w"
            title="Switch branches or tags">
      <svg text="gray" height="16" class="octicon octicon-git-branch text-gray" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path></svg>
      <span class="css-truncate-target" data-menu-button>master</span>
      <span class="dropdown-caret"></span>
    </summary>

    <details-menu class="SelectMenu SelectMenu--hasFilter" src="/Jermolene/TiddlyWiki5/refs/master/themes/tiddlywiki/seamless/base.tid?source_action=show&amp;source_controller=blob" preload>
      <div class="SelectMenu-modal">
        <include-fragment class="SelectMenu-loading" aria-label="Menu is loading">
          <svg class="octicon octicon-octoface anim-pulse" height="32" viewBox="0 0 24 24" version="1.1" width="32" aria-hidden="true"><path d="M7.75 11c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 102.5 0v-1.5C9 11.56 8.44 11 7.75 11zm1.27 4.5a.469.469 0 01.48-.5h5a.47.47 0 01.48.5c-.116 1.316-.759 2.5-2.98 2.5s-2.864-1.184-2.98-2.5zm7.23-4.5c-.69 0-1.25.56-1.25 1.25v1.5a1.25 1.25 0 102.5 0v-1.5c0-.69-.56-1.25-1.25-1.25z"></path><path fill-rule="evenodd" d="M21.255 3.82a1.725 1.725 0 00-2.141-1.195c-.557.16-1.406.44-2.264.866-.78.386-1.647.93-2.293 1.677A18.442 18.442 0 0012 5c-.93 0-1.784.059-2.569.17-.645-.74-1.505-1.28-2.28-1.664a13.876 13.876 0 00-2.265-.866 1.725 1.725 0 00-2.141 1.196 23.645 23.645 0 00-.69 3.292c-.125.97-.191 2.07-.066 3.112C1.254 11.882 1 13.734 1 15.527 1 19.915 3.13 23 12 23c8.87 0 11-3.053 11-7.473 0-1.794-.255-3.647-.99-5.29.127-1.046.06-2.15-.066-3.125a23.652 23.652 0 00-.689-3.292zM20.5 14c.5 3.5-1.5 6.5-8.5 6.5s-9-3-8.5-6.5c.583-4 3-6 8.5-6s7.928 2 8.5 6z"></path></svg>
        </include-fragment>
      </div>
    </details-menu>
  </details>

</div>

      <h2 id="blob-path" class="breadcrumb flex-auto min-width-0 text-normal mx-0 mx-md-3 width-full width-md-auto flex-order-1 flex-md-order-none mt-3 mt-md-0">
        <span class="js-repo-root text-bold"><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/Jermolene/TiddlyWiki5"><span>TiddlyWiki5</span></a></span></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/Jermolene/TiddlyWiki5/tree/master/themes"><span>themes</span></a></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/Jermolene/TiddlyWiki5/tree/master/themes/tiddlywiki"><span>tiddlywiki</span></a></span><span class="separator">/</span><span class="js-path-segment d-inline-block wb-break-all"><a data-pjax="true" href="/Jermolene/TiddlyWiki5/tree/master/themes/tiddlywiki/seamless"><span>seamless</span></a></span><span class="separator">/</span><strong class="final-path">base.tid</strong>
      </h2>
      <a href="/Jermolene/TiddlyWiki5/find/master"
            class="js-pjax-capture-input btn mr-2 d-none d-md-block"
            data-pjax
            data-hotkey="t">
        Go to file
      </a>

      <details id="blob-more-options-details" class="details-overlay details-reset position-relative">
  <summary role="button">
    <svg aria-label="More options" height="16" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" role="img"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
</summary>  <div>
    <ul class="dropdown-menu dropdown-menu-sw">
            <li class="d-block d-md-none">
              <a class="dropdown-item d-flex flex-items-baseline" data-hydro-click="{&quot;event_type&quot;:&quot;repository.click&quot;,&quot;payload&quot;:{&quot;target&quot;:&quot;FIND_FILE_BUTTON&quot;,&quot;repository_id&quot;:2828239,&quot;originating_url&quot;:&quot;https://github.com/Jermolene/TiddlyWiki5/blob/master/themes/tiddlywiki/seamless/base.tid&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="b9e257164839a2b288f3e63e944de4b91e784dda8378d87ca4ccc651237ca941" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" data-pjax="true" href="/Jermolene/TiddlyWiki5/find/master">
                <span class="flex-auto">Go to file</span>
                <span class="text-small text-gray" aria-hidden="true">T</span>
</a>            </li>
            <li data-toggle-for="blob-more-options-details">
              <button type="button" data-toggle-for="jumpto-line-details-dialog" class="btn-link dropdown-item">
                <span class="d-flex flex-items-baseline">
                  <span class="flex-auto">Go to line</span>
                  <span class="text-small text-gray" aria-hidden="true">L</span>
                </span>
              </button>
            </li>
            <li class="dropdown-divider" role="none"></li>
            <li>
              <clipboard-copy value="themes/tiddlywiki/seamless/base.tid" class="dropdown-item cursor-pointer" data-toggle-for="blob-more-options-details">
                Copy path
              </clipboard-copy>
            </li>
          </ul>
</div></details>    </div>



    <div class="Box d-flex flex-column flex-shrink-0 mb-3">
      
  <div class="Box-header Box-header--blue Details js-details-container">
      <div class="d-flex flex-items-center">
        <span class="flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1">
          <a rel="author" data-skip-pjax="true" data-hovercard-type="user" data-hovercard-url="/users/Jermolene/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/Jermolene"><img class="avatar avatar-user" src="https://avatars2.githubusercontent.com/u/174761?s=48&amp;v=4" width="24" height="24" alt="@Jermolene" /></a>
        </span>
        <div class="flex-1 d-flex flex-items-center ml-3 min-width-0">
          <div class="css-truncate css-truncate-overflow">
            <a class="text-bold link-gray-dark" rel="author" data-hovercard-type="user" data-hovercard-url="/users/Jermolene/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/Jermolene">Jermolene</a>

              <span>
                <a data-pjax="true" title="Fix blurred modal backdrops for Firefox" class="link-gray" href="/Jermolene/TiddlyWiki5/commit/b166632bbb76a7a033cd8fc3af14e5dadddfc631">Fix blurred modal backdrops for Firefox</a>
              </span>
          </div>


          <span class="ml-2">
            <include-fragment accept="text/fragment+html" src="/Jermolene/TiddlyWiki5/commit/b166632bbb76a7a033cd8fc3af14e5dadddfc631/rollup?direction=e" class="d-inline"></include-fragment>
          </span>
        </div>
        <div class="ml-3 d-flex flex-shrink-0 flex-items-center flex-justify-end text-gray no-wrap">
          <span class="d-none d-md-inline">
            <span>Latest commit</span>
            <a class="text-small text-mono link-gray" href="/Jermolene/TiddlyWiki5/commit/b166632bbb76a7a033cd8fc3af14e5dadddfc631" data-pjax>b166632</a>
            <span itemprop="dateModified"><relative-time datetime="2015-02-10T22:19:21Z" class="no-wrap">Feb 10, 2015</relative-time></span>
          </span>

          <a data-pjax href="/Jermolene/TiddlyWiki5/commits/master/themes/tiddlywiki/seamless/base.tid" class="ml-3 no-wrap link-gray-dark no-underline">
            <svg text="gray" height="16" class="octicon octicon-history text-gray" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"></path></svg>
            <span class="d-none d-sm-inline">
              <strong>History</strong>
            </span>
          </a>
        </div>
      </div>

  </div>

  <div class="Box-body d-flex flex-items-center flex-auto border-bottom-0 flex-wrap" >
    <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark float-left mr-3" id="blob_contributors_box">
      <summary class="link-gray-dark">
        <svg text="gray" height="16" class="octicon octicon-people text-gray" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M5.5 3.5a2 2 0 100 4 2 2 0 000-4zM2 5.5a3.5 3.5 0 115.898 2.549 5.507 5.507 0 013.034 4.084.75.75 0 11-1.482.235 4.001 4.001 0 00-7.9 0 .75.75 0 01-1.482-.236A5.507 5.507 0 013.102 8.05 3.49 3.49 0 012 5.5zM11 4a.75.75 0 100 1.5 1.5 1.5 0 01.666 2.844.75.75 0 00-.416.672v.352a.75.75 0 00.574.73c1.2.289 2.162 1.2 2.522 2.372a.75.75 0 101.434-.44 5.01 5.01 0 00-2.56-3.012A3 3 0 0011 4z"></path></svg>
        <strong>1</strong>
        
        contributor
      </summary>
      <details-dialog
        class="Box Box--overlay d-flex flex-column anim-fade-in fast"
        aria-label="Users who have contributed to this file"
        src="/Jermolene/TiddlyWiki5/contributors-list/master/themes/tiddlywiki/seamless/base.tid" preload>
        <div class="Box-header">
          <button class="Box-btn-octicon btn-octicon float-right" type="button" aria-label="Close dialog" data-close-dialog>
            <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
          </button>
          <h3 class="Box-title">
            Users who have contributed to this file
          </h3>
        </div>
        <include-fragment class="octocat-spinner my-3" aria-label="Loading..."></include-fragment>
      </details-dialog>
    </details>
  </div>
    </div>






    <div class="Box mt-3 position-relative
      ">
      
<div class="Box-header py-2 d-flex flex-column flex-shrink-0 flex-md-row flex-md-items-center">
  <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1 mt-2 mt-md-0">

      103 lines (80 sloc)
      <span class="file-info-divider"></span>
    2.19 KB
  </div>

  <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between">

    <div class="BtnGroup">
      <a href="/Jermolene/TiddlyWiki5/raw/master/themes/tiddlywiki/seamless/base.tid" id="raw-url" role="button" class="btn btn-sm BtnGroup-item ">Raw</a>
        <a href="/Jermolene/TiddlyWiki5/blame/master/themes/tiddlywiki/seamless/base.tid" data-hotkey="b" role="button" class="btn js-update-url-with-hash btn-sm BtnGroup-item ">Blame</a>
    </div>

    <div>
          <a class="btn-octicon tooltipped tooltipped-nw js-remove-unless-platform"
             data-platforms="windows,mac"
             href="https://desktop.github.com"
             aria-label="Open this file in GitHub Desktop"
             data-ga-click="Repository, open with desktop">
              <svg class="octicon octicon-device-desktop" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.75 2.5h12.5a.25.25 0 01.25.25v7.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25v-7.5a.25.25 0 01.25-.25zM14.25 1H1.75A1.75 1.75 0 000 2.75v7.5C0 11.216.784 12 1.75 12h3.727c-.1 1.041-.52 1.872-1.292 2.757A.75.75 0 004.75 16h6.5a.75.75 0 00.565-1.243c-.772-.885-1.193-1.716-1.292-2.757h3.727A1.75 1.75 0 0016 10.25v-7.5A1.75 1.75 0 0014.25 1zM9.018 12H6.982a5.72 5.72 0 01-.765 2.5h3.566a5.72 5.72 0 01-.765-2.5z"></path></svg>
          </a>

          <a href="/login?return_to=%2FJermolene%2FTiddlyWiki5%2Fblob%2Fmaster%2Fthemes%2Ftiddlywiki%2Fseamless%2Fbase.tid" class="btn-octicon disabled tooltipped tooltipped-nw"
            aria-label="You must be signed in to make or propose changes">
            <svg class="octicon octicon-pencil" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg>
          </a>
          <a href="/login?return_to=%2FJermolene%2FTiddlyWiki5%2Fblob%2Fmaster%2Fthemes%2Ftiddlywiki%2Fseamless%2Fbase.tid" class="btn-octicon btn-octicon-danger disabled tooltipped tooltipped-nw"
            aria-label="You must be signed in to make or propose changes">
            <svg class="octicon octicon-trashcan" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg>
          </a>
    </div>
  </div>
</div>

      

  <div itemprop="text" class="Box-body p-0 blob-wrapper data type-text  gist-border-0">
      
<table class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip>
      <tr>
        <td id="L1" class="blob-num js-line-number" data-line-number="1"></td>
        <td id="LC1" class="blob-code blob-code-inner js-file-line">title: $:/themes/tiddlywiki/seamless/base</td>
      </tr>
      <tr>
        <td id="L2" class="blob-num js-line-number" data-line-number="2"></td>
        <td id="LC2" class="blob-code blob-code-inner js-file-line">tags: [[$:/tags/Stylesheet]]</td>
      </tr>
      <tr>
        <td id="L3" class="blob-num js-line-number" data-line-number="3"></td>
        <td id="LC3" class="blob-code blob-code-inner js-file-line">list-after: $:/themes/tiddlywiki/vanilla/base</td>
      </tr>
      <tr>
        <td id="L4" class="blob-num js-line-number" data-line-number="4"></td>
        <td id="LC4" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L5" class="blob-num js-line-number" data-line-number="5"></td>
        <td id="LC5" class="blob-code blob-code-inner js-file-line">\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline</td>
      </tr>
      <tr>
        <td id="L6" class="blob-num js-line-number" data-line-number="6"></td>
        <td id="LC6" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L7" class="blob-num js-line-number" data-line-number="7"></td>
        <td id="LC7" class="blob-code blob-code-inner js-file-line">/*</td>
      </tr>
      <tr>
        <td id="L8" class="blob-num js-line-number" data-line-number="8"></td>
        <td id="LC8" class="blob-code blob-code-inner js-file-line">Rules copied from Snow White</td>
      </tr>
      <tr>
        <td id="L9" class="blob-num js-line-number" data-line-number="9"></td>
        <td id="LC9" class="blob-code blob-code-inner js-file-line">*/</td>
      </tr>
      <tr>
        <td id="L10" class="blob-num js-line-number" data-line-number="10"></td>
        <td id="LC10" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L11" class="blob-num js-line-number" data-line-number="11"></td>
        <td id="LC11" class="blob-code blob-code-inner js-file-line">.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {</td>
      </tr>
      <tr>
        <td id="L12" class="blob-num js-line-number" data-line-number="12"></td>
        <td id="LC12" class="blob-code blob-code-inner js-file-line">	&lt;&lt;transition &quot;fill 150ms ease-in-out&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L13" class="blob-num js-line-number" data-line-number="13"></td>
        <td id="LC13" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L14" class="blob-num js-line-number" data-line-number="14"></td>
        <td id="LC14" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L15" class="blob-num js-line-number" data-line-number="15"></td>
        <td id="LC15" class="blob-code blob-code-inner js-file-line">.tc-tiddler-controls button.tc-selected svg {</td>
      </tr>
      <tr>
        <td id="L16" class="blob-num js-line-number" data-line-number="16"></td>
        <td id="LC16" class="blob-code blob-code-inner js-file-line">	&lt;&lt;filter &quot;drop-shadow(0px -1px 2px rgba(0,0,0,0.25))&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L17" class="blob-num js-line-number" data-line-number="17"></td>
        <td id="LC17" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L18" class="blob-num js-line-number" data-line-number="18"></td>
        <td id="LC18" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L19" class="blob-num js-line-number" data-line-number="19"></td>
        <td id="LC19" class="blob-code blob-code-inner js-file-line">.tc-drop-down {</td>
      </tr>
      <tr>
        <td id="L20" class="blob-num js-line-number" data-line-number="20"></td>
        <td id="LC20" class="blob-code blob-code-inner js-file-line">	border-radius: 4px;</td>
      </tr>
      <tr>
        <td id="L21" class="blob-num js-line-number" data-line-number="21"></td>
        <td id="LC21" class="blob-code blob-code-inner js-file-line">	&lt;&lt;box-shadow &quot;2px 2px 10px rgba(0, 0, 0, 0.5)&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L22" class="blob-num js-line-number" data-line-number="22"></td>
        <td id="LC22" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L23" class="blob-num js-line-number" data-line-number="23"></td>
        <td id="LC23" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L24" class="blob-num js-line-number" data-line-number="24"></td>
        <td id="LC24" class="blob-code blob-code-inner js-file-line">.tc-block-dropdown {</td>
      </tr>
      <tr>
        <td id="L25" class="blob-num js-line-number" data-line-number="25"></td>
        <td id="LC25" class="blob-code blob-code-inner js-file-line">	border-radius: 4px;</td>
      </tr>
      <tr>
        <td id="L26" class="blob-num js-line-number" data-line-number="26"></td>
        <td id="LC26" class="blob-code blob-code-inner js-file-line">	&lt;&lt;box-shadow &quot;2px 2px 10px rgba(0, 0, 0, 0.5)&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L27" class="blob-num js-line-number" data-line-number="27"></td>
        <td id="LC27" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L28" class="blob-num js-line-number" data-line-number="28"></td>
        <td id="LC28" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L29" class="blob-num js-line-number" data-line-number="29"></td>
        <td id="LC29" class="blob-code blob-code-inner js-file-line">.tc-modal-displayed {</td>
      </tr>
      <tr>
        <td id="L30" class="blob-num js-line-number" data-line-number="30"></td>
        <td id="LC30" class="blob-code blob-code-inner js-file-line">	&lt;&lt;filter &quot;blur(4px)&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L31" class="blob-num js-line-number" data-line-number="31"></td>
        <td id="LC31" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L32" class="blob-num js-line-number" data-line-number="32"></td>
        <td id="LC32" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L33" class="blob-num js-line-number" data-line-number="33"></td>
        <td id="LC33" class="blob-code blob-code-inner js-file-line">.tc-modal {</td>
      </tr>
      <tr>
        <td id="L34" class="blob-num js-line-number" data-line-number="34"></td>
        <td id="LC34" class="blob-code blob-code-inner js-file-line">	border-radius: 6px;</td>
      </tr>
      <tr>
        <td id="L35" class="blob-num js-line-number" data-line-number="35"></td>
        <td id="LC35" class="blob-code blob-code-inner js-file-line">	&lt;&lt;box-shadow &quot;0 3px 7px rgba(0,0,0,0.3)&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L36" class="blob-num js-line-number" data-line-number="36"></td>
        <td id="LC36" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L37" class="blob-num js-line-number" data-line-number="37"></td>
        <td id="LC37" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L38" class="blob-num js-line-number" data-line-number="38"></td>
        <td id="LC38" class="blob-code blob-code-inner js-file-line">.tc-modal-footer {</td>
      </tr>
      <tr>
        <td id="L39" class="blob-num js-line-number" data-line-number="39"></td>
        <td id="LC39" class="blob-code blob-code-inner js-file-line">	border-radius: 0 0 6px 6px;</td>
      </tr>
      <tr>
        <td id="L40" class="blob-num js-line-number" data-line-number="40"></td>
        <td id="LC40" class="blob-code blob-code-inner js-file-line">	&lt;&lt;box-shadow &quot;inset 0 1px 0 #fff&quot;&gt;&gt;;</td>
      </tr>
      <tr>
        <td id="L41" class="blob-num js-line-number" data-line-number="41"></td>
        <td id="LC41" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L42" class="blob-num js-line-number" data-line-number="42"></td>
        <td id="LC42" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L43" class="blob-num js-line-number" data-line-number="43"></td>
        <td id="LC43" class="blob-code blob-code-inner js-file-line">.tc-alert {</td>
      </tr>
      <tr>
        <td id="L44" class="blob-num js-line-number" data-line-number="44"></td>
        <td id="LC44" class="blob-code blob-code-inner js-file-line">	border-radius: 6px;</td>
      </tr>
      <tr>
        <td id="L45" class="blob-num js-line-number" data-line-number="45"></td>
        <td id="LC45" class="blob-code blob-code-inner js-file-line">	&lt;&lt;box-shadow &quot;0 3px 7px rgba(0,0,0,0.6)&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L46" class="blob-num js-line-number" data-line-number="46"></td>
        <td id="LC46" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L47" class="blob-num js-line-number" data-line-number="47"></td>
        <td id="LC47" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L48" class="blob-num js-line-number" data-line-number="48"></td>
        <td id="LC48" class="blob-code blob-code-inner js-file-line">.tc-notification {</td>
      </tr>
      <tr>
        <td id="L49" class="blob-num js-line-number" data-line-number="49"></td>
        <td id="LC49" class="blob-code blob-code-inner js-file-line">	border-radius: 6px;</td>
      </tr>
      <tr>
        <td id="L50" class="blob-num js-line-number" data-line-number="50"></td>
        <td id="LC50" class="blob-code blob-code-inner js-file-line">	&lt;&lt;box-shadow &quot;0 3px 7px rgba(0,0,0,0.3)&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L51" class="blob-num js-line-number" data-line-number="51"></td>
        <td id="LC51" class="blob-code blob-code-inner js-file-line">	text-shadow: 0 1px 0 rgba(255,255,255, 0.8);</td>
      </tr>
      <tr>
        <td id="L52" class="blob-num js-line-number" data-line-number="52"></td>
        <td id="LC52" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L53" class="blob-num js-line-number" data-line-number="53"></td>
        <td id="LC53" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L54" class="blob-num js-line-number" data-line-number="54"></td>
        <td id="LC54" class="blob-code blob-code-inner js-file-line">.tc-message-box img {</td>
      </tr>
      <tr>
        <td id="L55" class="blob-num js-line-number" data-line-number="55"></td>
        <td id="LC55" class="blob-code blob-code-inner js-file-line">	&lt;&lt;box-shadow &quot;1px 1px 3px rgba(0,0,0,0.5)&quot;&gt;&gt;</td>
      </tr>
      <tr>
        <td id="L56" class="blob-num js-line-number" data-line-number="56"></td>
        <td id="LC56" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L57" class="blob-num js-line-number" data-line-number="57"></td>
        <td id="LC57" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L58" class="blob-num js-line-number" data-line-number="58"></td>
        <td id="LC58" class="blob-code blob-code-inner js-file-line">/*</td>
      </tr>
      <tr>
        <td id="L59" class="blob-num js-line-number" data-line-number="59"></td>
        <td id="LC59" class="blob-code blob-code-inner js-file-line">Seamless modifications</td>
      </tr>
      <tr>
        <td id="L60" class="blob-num js-line-number" data-line-number="60"></td>
        <td id="LC60" class="blob-code blob-code-inner js-file-line">*/</td>
      </tr>
      <tr>
        <td id="L61" class="blob-num js-line-number" data-line-number="61"></td>
        <td id="LC61" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L62" class="blob-num js-line-number" data-line-number="62"></td>
        <td id="LC62" class="blob-code blob-code-inner js-file-line">@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {</td>
      </tr>
      <tr>
        <td id="L63" class="blob-num js-line-number" data-line-number="63"></td>
        <td id="LC63" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L64" class="blob-num js-line-number" data-line-number="64"></td>
        <td id="LC64" class="blob-code blob-code-inner js-file-line">	/* Drop the tiddler frame padding */</td>
      </tr>
      <tr>
        <td id="L65" class="blob-num js-line-number" data-line-number="65"></td>
        <td id="LC65" class="blob-code blob-code-inner js-file-line">	body.tc-body .tc-tiddler-frame {</td>
      </tr>
      <tr>
        <td id="L66" class="blob-num js-line-number" data-line-number="66"></td>
        <td id="LC66" class="blob-code blob-code-inner js-file-line">		padding: 0;</td>
      </tr>
      <tr>
        <td id="L67" class="blob-num js-line-number" data-line-number="67"></td>
        <td id="LC67" class="blob-code blob-code-inner js-file-line">	}</td>
      </tr>
      <tr>
        <td id="L68" class="blob-num js-line-number" data-line-number="68"></td>
        <td id="LC68" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L69" class="blob-num js-line-number" data-line-number="69"></td>
        <td id="LC69" class="blob-code blob-code-inner js-file-line">	/* Move the sidebar up so that the title lines up */</td>
      </tr>
      <tr>
        <td id="L70" class="blob-num js-line-number" data-line-number="70"></td>
        <td id="LC70" class="blob-code blob-code-inner js-file-line">	body.tc-body .tc-sidebar-scrollable {</td>
      </tr>
      <tr>
        <td id="L71" class="blob-num js-line-number" data-line-number="71"></td>
        <td id="LC71" class="blob-code blob-code-inner js-file-line">		padding: 43px 0 28px 42px;</td>
      </tr>
      <tr>
        <td id="L72" class="blob-num js-line-number" data-line-number="72"></td>
        <td id="LC72" class="blob-code blob-code-inner js-file-line">	}</td>
      </tr>
      <tr>
        <td id="L73" class="blob-num js-line-number" data-line-number="73"></td>
        <td id="LC73" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L74" class="blob-num js-line-number" data-line-number="74"></td>
        <td id="LC74" class="blob-code blob-code-inner js-file-line">	/* Stop the tiddler info panel from bleeding into the tiddler frame padding */</td>
      </tr>
      <tr>
        <td id="L75" class="blob-num js-line-number" data-line-number="75"></td>
        <td id="LC75" class="blob-code blob-code-inner js-file-line">	body.tc-body .tc-tiddler-info {</td>
      </tr>
      <tr>
        <td id="L76" class="blob-num js-line-number" data-line-number="76"></td>
        <td id="LC76" class="blob-code blob-code-inner js-file-line">		margin: 0;</td>
      </tr>
      <tr>
        <td id="L77" class="blob-num js-line-number" data-line-number="77"></td>
        <td id="LC77" class="blob-code blob-code-inner js-file-line">	}</td>
      </tr>
      <tr>
        <td id="L78" class="blob-num js-line-number" data-line-number="78"></td>
        <td id="LC78" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L79" class="blob-num js-line-number" data-line-number="79"></td>
        <td id="LC79" class="blob-code blob-code-inner js-file-line">	/* Stop message boxes from bleeding into the tiddler frame padding */</td>
      </tr>
      <tr>
        <td id="L80" class="blob-num js-line-number" data-line-number="80"></td>
        <td id="LC80" class="blob-code blob-code-inner js-file-line">	body.tc-body .tc-message-box {</td>
      </tr>
      <tr>
        <td id="L81" class="blob-num js-line-number" data-line-number="81"></td>
        <td id="LC81" class="blob-code blob-code-inner js-file-line">		margin: 21px 0 21px 0;</td>
      </tr>
      <tr>
        <td id="L82" class="blob-num js-line-number" data-line-number="82"></td>
        <td id="LC82" class="blob-code blob-code-inner js-file-line">	}</td>
      </tr>
      <tr>
        <td id="L83" class="blob-num js-line-number" data-line-number="83"></td>
        <td id="LC83" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L84" class="blob-num js-line-number" data-line-number="84"></td>
        <td id="LC84" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L85" class="blob-num js-line-number" data-line-number="85"></td>
        <td id="LC85" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L86" class="blob-num js-line-number" data-line-number="86"></td>
        <td id="LC86" class="blob-code blob-code-inner js-file-line">/* Use the tiddler background colour for the page background */</td>
      </tr>
      <tr>
        <td id="L87" class="blob-num js-line-number" data-line-number="87"></td>
        <td id="LC87" class="blob-code blob-code-inner js-file-line">html body.tc-body {</td>
      </tr>
      <tr>
        <td id="L88" class="blob-num js-line-number" data-line-number="88"></td>
        <td id="LC88" class="blob-code blob-code-inner js-file-line">	background-color: &lt;&lt;colour background&gt;&gt;;</td>
      </tr>
      <tr>
        <td id="L89" class="blob-num js-line-number" data-line-number="89"></td>
        <td id="LC89" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L90" class="blob-num js-line-number" data-line-number="90"></td>
        <td id="LC90" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L91" class="blob-num js-line-number" data-line-number="91"></td>
        <td id="LC91" class="blob-code blob-code-inner js-file-line">html:-webkit-full-screen {</td>
      </tr>
      <tr>
        <td id="L92" class="blob-num js-line-number" data-line-number="92"></td>
        <td id="LC92" class="blob-code blob-code-inner js-file-line">	background-color: &lt;&lt;colour background&gt;&gt;;</td>
      </tr>
      <tr>
        <td id="L93" class="blob-num js-line-number" data-line-number="93"></td>
        <td id="LC93" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L94" class="blob-num js-line-number" data-line-number="94"></td>
        <td id="LC94" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L95" class="blob-num js-line-number" data-line-number="95"></td>
        <td id="LC95" class="blob-code blob-code-inner js-file-line">/* Adjust the colour of the page controls */</td>
      </tr>
      <tr>
        <td id="L96" class="blob-num js-line-number" data-line-number="96"></td>
        <td id="LC96" class="blob-code blob-code-inner js-file-line">body.tc-body .tc-page-controls svg {</td>
      </tr>
      <tr>
        <td id="L97" class="blob-num js-line-number" data-line-number="97"></td>
        <td id="LC97" class="blob-code blob-code-inner js-file-line">	fill: &lt;&lt;colour muted-foreground&gt;&gt;;</td>
      </tr>
      <tr>
        <td id="L98" class="blob-num js-line-number" data-line-number="98"></td>
        <td id="LC98" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
      <tr>
        <td id="L99" class="blob-num js-line-number" data-line-number="99"></td>
        <td id="LC99" class="blob-code blob-code-inner js-file-line">
</td>
      </tr>
      <tr>
        <td id="L100" class="blob-num js-line-number" data-line-number="100"></td>
        <td id="LC100" class="blob-code blob-code-inner js-file-line">/* Adjust the colour of the sidebar selected tabs */</td>
      </tr>
      <tr>
        <td id="L101" class="blob-num js-line-number" data-line-number="101"></td>
        <td id="LC101" class="blob-code blob-code-inner js-file-line">body.tc-body .tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {</td>
      </tr>
      <tr>
        <td id="L102" class="blob-num js-line-number" data-line-number="102"></td>
        <td id="LC102" class="blob-code blob-code-inner js-file-line">	background-color: &lt;&lt;colour background&gt;&gt;;</td>
      </tr>
      <tr>
        <td id="L103" class="blob-num js-line-number" data-line-number="103"></td>
        <td id="LC103" class="blob-code blob-code-inner js-file-line">}</td>
      </tr>
</table>

  <details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true">
    <summary class="btn-octicon ml-0 px-2 p-0 bg-white border border-gray-dark rounded-1" aria-label="Inline file action toolbar">
      <svg class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path></svg>
    </summary>
    <details-menu>
      <ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se mt-2" style="width:185px">
        <li>
          <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;">
            Copy lines
          </clipboard-copy>
        </li>
        <li>
          <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;">
            Copy permalink
          </clipboard-copy>
        </li>
        <li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/Jermolene/TiddlyWiki5/blame/34a51d2e239c8d200f8b79a85aae1e651f016d79/themes/tiddlywiki/seamless/base.tid">View git blame</a></li>
          <li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/Jermolene/TiddlyWiki5/issues/new">Reference in new issue</a></li>
      </ul>
    </details-menu>
  </details>

  </div>

    </div>

  


  <details class="details-reset details-overlay details-overlay-dark" id="jumpto-line-details-dialog">
    <summary data-hotkey="l" aria-label="Jump to line"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line">
      <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" action="" accept-charset="UTF-8" method="get">
        <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
        <button type="submit" class="btn" data-close-dialog>Go</button>
</form>    </details-dialog>
  </details>




  </div>
</div>

    </main>
  </div>

  </div>

        
<div class="footer container-xl width-full p-responsive" role="contentinfo">
    <div class="position-relative d-flex flex-row-reverse flex-lg-row flex-wrap flex-lg-nowrap flex-justify-center flex-lg-justify-between flex-sm-items-center pt-6 pb-2 mt-6 f6 text-gray border-top border-gray-light ">
      <a aria-label="Homepage" title="GitHub" class="footer-octicon d-none d-lg-block mr-lg-4" href="https://github.com">
        <svg height="24" class="octicon octicon-mark-github" viewBox="0 0 16 16" version="1.1" width="24" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg>
</a>
      <ul class="list-style-none d-flex flex-wrap col-12 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0">
        <li class="mr-3 mr-lg-0">&copy; 2020 GitHub, Inc.</li>
          <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to terms, text:terms" href="https://github.com/site/terms">Terms</a></li>
          <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to privacy, text:privacy" href="https://github.com/site/privacy">Privacy</a></li>
            <li class="js-cookie-consent-preferences-link-container mr-3 mr-lg-0" hidden="hidden">
  <button data-ga-click="Footer, go to cookie preferences, text:cookie preferences" class="btn-link js-cookie-consent-preferences-link" type="button">Cookie Preferences</button>
</li>
          <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to security, text:security" href="https://github.com/security">Security</a></li>
          <li class="mr-3 mr-lg-0"><a href="https://githubstatus.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
          <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to help, text:help" href="https://docs.github.com">Help</a></li>
          <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to contact, text:contact" href="https://github.com/contact">Contact GitHub</a></li>
          <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-ga-click="Footer, go to Pricing, text:Pricing">Pricing</a></li>
        <li class="mr-3 mr-lg-0"><a href="https://docs.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
        <li class="mr-3 mr-lg-0"><a href="https://services.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
          <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
          <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li>
      </ul>
    </div>
  <div class="d-flex flex-justify-center pb-6">
    <span class="f6 text-gray-light"></span>
  </div>
</div>



  <div id="ajax-error-message" class="ajax-error-message flash flash-error">
    <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
    </button>
    You can’t perform that action at this time.
  </div>


    <script crossorigin="anonymous" async="async" integrity="sha512-O8GTqkyR57l/sxhU8bdDyhNYweSdc6TzDwJ7JvY4SJpZye2+L5ayXb5dDiHo45PLT+boMpfMts4kmDzwuv6ZBQ==" type="application/javascript" id="js-conditional-compat" data-src="https://github.githubassets.com/assets/compat-3bc193aa.js"></script>
    <script crossorigin="anonymous" integrity="sha512-qBeyRIjDR3DFKTE2D3j4NncHH72scmqyompBxHHrg7D5+rWW8q2xTxXbF7Z2g8Jx7UNpXfM+3R/FVU0SLgFrgw==" type="application/javascript" src="https://github.githubassets.com/assets/environment-a817b244.js"></script>
    <script crossorigin="anonymous" async="async" integrity="sha512-A92r+ugaVBSfAqxAowqXb3Ob3aLzxKzyKWdn631LQWLnDyc+BAxOn1ga9GFlXdb9fxYenTyHyvCgYq4MzFW/pQ==" type="application/javascript" src="https://github.githubassets.com/assets/vendor-03ddabfa.js"></script>
    <script crossorigin="anonymous" async="async" integrity="sha512-ogHXrHm/EOH5B1NY0vTPmTEh0VjSIR+l3a6ZCwbTSDysQ8NyH5T5GLdCEuW/KVnuS85Xh7bXyM+QolgGbkFLoA==" type="application/javascript" src="https://github.githubassets.com/assets/frameworks-a201d7ac.js"></script>
    
    <script crossorigin="anonymous" async="async" integrity="sha512-ewxYAfGOC2JtOLgVSW3f1MRUZg1R2oeyFOoIxlycWt02TbE2kbLyUwrPczp8h6ZgKdxxElGcMvnPBRj83NycYA==" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-7b0c5801.js"></script>
    
      <script crossorigin="anonymous" async="async" integrity="sha512-RszHIHnndPaGg3NOiAwqnXVqUjh0w5UcxXlbyz2lr3Wc39TWJs7X0JCzeFjpZlnojNSJHe8zLG0UTuk1AR+CBA==" type="application/javascript" data-module-id="./contributions-spider-graph.js" data-src="https://github.githubassets.com/assets/contributions-spider-graph-46ccc720.js"></script>
      <script crossorigin="anonymous" async="async" integrity="sha512-bzgw90+7V7ytCzBrH1OT+chKUuZWnShU34Nj8j4NsUAlBHcwWJZe7drP7Uyhu6LfWRcnyk2s2K6XN8dtHO7Xxg==" type="application/javascript" data-module-id="./drag-drop.js" data-src="https://github.githubassets.com/assets/drag-drop-6f3830f7.js"></script>
      <script crossorigin="anonymous" async="async" integrity="sha512-3ns7NIU6EybySZNjVJj+80iQpQuKE5P/913dcTyjpKiCUroOM00uwvpOf/vWvNfZPq90YU9tHxsOing+P+Up0w==" type="application/javascript" data-module-id="./jump-to.js" data-src="https://github.githubassets.com/assets/jump-to-de7b3b34.js"></script>
      <script crossorigin="anonymous" async="async" integrity="sha512-7mITT1qdYmI511H3C9gYUrNP6rZpd+jr9UfoQpluc2rM8dDUxvoOxb7MoxQGp450Gv5OV2J33Q962eio62OSTw==" type="application/javascript" data-module-id="./profile-pins-element.js" data-src="https://github.githubassets.com/assets/profile-pins-element-ee62134f.js"></script>
      <script crossorigin="anonymous" async="async" integrity="sha512-mGhHrE0HJ7vEibXJt/Agfu9Gd7z9PpvEiRthudiS5f0WZMyO6PvVmdN9pVZsQEybIa4wKuiSeHBh5LGE/AqKwg==" type="application/javascript" data-module-id="./randomColor.js" data-src="https://github.githubassets.com/assets/randomColor-986847ac.js"></script>
      <script crossorigin="anonymous" async="async" integrity="sha512-PulklwTNjJArlDqvCysC0AKYETVeAa1gJlPSSwR/CinO1u09p8B8vtwVwiTdeutKpU7PP0cWWxuFDOZcdor/Ww==" type="application/javascript" data-module-id="./sortable-behavior.js" data-src="https://github.githubassets.com/assets/sortable-behavior-3ee96497.js"></script>
      <script crossorigin="anonymous" async="async" integrity="sha512-tivtbSQPkxNrK2SWvxwouEUSEPrjFMxk5qbZHCeDzaJE1oi3cc2a+iAr3stKZdWYnIFRgWmOImn8k5+MyPZUEg==" type="application/javascript" data-module-id="./tweetsodium.js" data-src="https://github.githubassets.com/assets/tweetsodium-b62bed6d.js"></script>
      <script crossorigin="anonymous" async="async" integrity="sha512-R7q4jNJ4vUxWi/Ow35zhtKpH2UVfGY/drFzWaBPwlCuXz1v8jFTDbT6R7+zbG3ycajaKSxPxhSNPT69QjmY8XA==" type="application/javascript" data-module-id="./user-status-submit.js" data-src="https://github.githubassets.com/assets/user-status-submit-47bab88c.js"></script>
    
    <script crossorigin="anonymous" async="async" integrity="sha512-Q9jIRoW3dRS3H3gzaWJQZFmq9lNBwHdWe+oO+ZvaeTYEgPTj3VS+qBOx83vhlZ9ag+fU3vHGaxCnqaEU2BijFw==" type="application/javascript" src="https://github.githubassets.com/assets/repositories-43d8c846.js"></script>
<script crossorigin="anonymous" async="async" integrity="sha512-4mxGNQBAaKrqCvuadGW15bUQii4MdchpfGcnhrJGPvFle+tdUB+ZykxrcFb3R6NxnNSjh0i0SpHeJ7JR/DDIlw==" type="application/javascript" src="https://github.githubassets.com/assets/diffs-e26c4635.js"></script>
<script crossorigin="anonymous" async="async" integrity="sha512-UihC5BYt/Sv16wnOzHNOXdNnZScuoDak9WUPZ+xOm97b6yDdAPjzcthaFPWAobIhCN9ZnVYk7UtRYXHxRE+9IA==" type="application/javascript" src="https://github.githubassets.com/assets/github-522842e4.js"></script>
  <div class="js-stale-session-flash flash flash-warn flash-banner" hidden
    >
    <svg class="octicon octicon-alert" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path></svg>
    <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
    <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
  </div>
  <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default text-gray-dark hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg class="octicon octicon-x" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path></svg>
      </button>
      <div class="octocat-spinner my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

  <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box box-shadow-large" style="width:360px;">
  </div>
</div>

    <div class="js-cookie-consent-banner" hidden>
  <div class="hx_cookie-banner p-2 p-sm-3 p-md-4">
    <div style="max-width: 1194px;" class="Box hx_cookie-banner-box box-shadow-medium mx-auto">
    <div class="Box-body border-0 py-0 px-3 px-md-4">
      <div class="js-main-cookie-banner hx_cookie-banner-main">
          <div class="d-md-flex flex-items-center py-3">
            <p class="f5 flex-1 mb-3 mb-md-0">
              
  We use <span class="text-bold">optional</span> third-party analytics cookies to understand how you use GitHub.com so we can build better products.

              <span class="btn-link js-cookie-consent-learn-more">Learn more</span>.
            </p>
            <div class="d-flex d-md-block flex-wrap flex-sm-nowrap">
              <button class="btn btn-outline flex-1 mr-1 mx-sm-1 m-md-0 ml-md-2 js-cookie-consent-accept">Accept</button>
              <button class="btn btn-outline flex-1 ml-1 m-md-0 ml-md-2 js-cookie-consent-reject">Reject</button>
            </div>
          </div>
        </div>

        <div class="js-cookie-details hx_cookie-banner-details" hidden>
          <div class="d-md-flex flex-items-center py-3">
            <p class="f5 flex-1 mb-2 mb-md-0">
              
  We use <span class="text-bold">optional</span> third-party analytics cookies to understand how you use GitHub.com so we can build better products.

              <br>
              You can always update your selection by clicking <span class="text-bold">Cookie Preferences</span> at the bottom of the page.
              For more information, see our <a href="https://docs.github.com/en/free-pro-team@latest/github/site-policy/github-privacy-statement">Privacy Statement</a>.
            </p>
          </div>

          <div class="d-md-flex flex-items-center py-3 border-top">
            <div class="f5 flex-1 mb-2 mb-md-0">
              <h5 class="mb-1">Essential cookies</h5>
              <p class="f6 mb-md-0">We use essential cookies to perform essential website functions, e.g. they're used to log you in. 
                <a href="https://docs.github.com/en/github/site-policy/github-subprocessors-and-cookies">Learn more</a>
              </p>
            </div>
            <div class="text-right">
              <h5 class="text-blue">Always active</h5>
            </div>
          </div>

          <div class="d-md-flex flex-items-center py-3 border-top">
            <div class="f5 flex-1 mb-2 mb-md-0">
              <h5 class="mb-1">Analytics cookies</h5>
              <p class="f6 mb-md-0">We use analytics cookies to understand how you use our websites so we can make them better, e.g. they're used to gather information about the pages you visit and how many clicks you need to accomplish a task. 
                <a href="https://docs.github.com/en/github/site-policy/github-subprocessors-and-cookies">Learn more</a>
              </p>
            </div>
            <div class="text-right">
              <div class="BtnGroup mt-1 mt-md-0 ml-2">
                <button class="btn btn-outline BtnGroup-item js-accept-analytics-cookies" type="button">Accept</button>
                <button class="btn btn-outline BtnGroup-item js-reject-analytics-cookies" type="button">Reject</button>
              </div>
            </div>
          </div>

          <div class="text-right py-3 border-top">
            <button class="btn btn-primary js-save-cookie-preferences" type="button" disabled>Save preferences</button>
          </div>
        </div>
</div></div>  </div>
</div>


  </body>
</html>

; Summary
: Instead of 3d printing order dice with icons that cannot be read, print a square block of //x// size and then have a color sticker that can be placed on the square to then fit in the base slot of the ship.
![img[British Forces.image]] [[BEF Frankforce - Left Column]]

:<$list filter="[tag[BEF Frankforce - Left Column]]">
<h2><$link><$transclude tiddler/></$link></h2>
<$transclude mode="block"/>
</$list>
![img[British Forces.image]] [[BEF Frankforce - Right Column]]

:<$list filter="[tag[BEF Frankforce - Right Column]]">
<h2><$link><$transclude tiddler/></$link></h2>
<$transclude mode="block"/>
</$list>
![img[British Forces.image]] [[BEF Petreforce]]

:<$list filter="[tag[BEF Petreforce]]">
<h2><$link><$transclude tiddler/></$link></h2>
<$transclude mode="block"/>
</$list>
; With Facial Recognition

; Phototheca 
: https://lunarship.com/
: One time $40 cost for Pro

; ImageRanger
: https://imageranger.com/index.html




;Source
:[[https://bettershelter.org/product/]]

[img[Better Shelter.org.image]]
[img[Black and Decker Alligator LP1000.image]]

The Black & Decker Alligator lopper LP1000 is the corded version of the tool and also has the most reviews on Amazon with over 680 reviews at 4.7 out of 5 stars. That’s very impressive. What I’m trying to say is that customers who actually purchased this saw absolutely love it so there’s nothing more that I can really add to that. True validation comes from customers who use the device on a regular basis.

If you don’t mind dealing with an extension cord and you need to do a lot of cutting then this is certainly the model to buy. You can use this model all day long without ever having to worry about when the battery will die on you, which is makes yard work more pleasant and less stressful. 

;Source
:https://www.blackchantry.com/


Black Chantry Productions make games because we love games, and our passion will reflect in our business decisions. Our first and foremost project will be Vampire: The Eternal Struggle, a unique game that holds a special place in our hearts.

We want to secure the future of Vampire: The Eternal Struggle by attracting, supporting and rekindling players all over the world. We will produce cards, both reprints and new. We will continue the current design process, now in concert with White Wolf Entertainment, our licensor and the developers of the World of Darkness brands and story plots.

We are to use whatever form of publishing and distribution that is appropriate, be it print on demand, crowdfunding or traditional retail channels. In time, we really want the game to have a presence in your local game store.

We want the player community to be involved in the production of the game. This means transparency in our processes, with perpetual customer dialogue, community playtesting and promotion of game events.

We are to attract many new players, but any actions taken to further this end will be made with the current player base in mind.

Black Chantry Productions will start slowly and grow organically to secure the future of Vampire: The Eternal Struggle. In the long run, we aim to become a thriving company with several product lines and many satisfied customers.

[img[Black Powder Snowmen.image.01]]
[img[Black Powder Snowmen.image.02]]

This code contains three 28mm scale resin and metal miniatures. Three Snowmen armed with Musket (Bayonet) and Pistol, Carbine, Blunderbuss and Axe. Easy to assemble from a body with separate head and arms giving a limited amount of pose choice. Great for any game system especially Flintloque. They stand 28mm to the eye line and are supplied unpainted, unassembled and without bases. 

You can choose from a pack of three or a Value Blister containing twelve mixed Snowmen with a saving. 

They charged out of the shimmering desert, thousands of fanatical warriors dressed in white, brandishing fearsome weapons. These were the Mahdi’s men and a British soldier’s worst nightmare. The Mahdi had emerged from the wilderness to lead a rebellion against the Egyptian government in Sudan. His armies overwhelmed the Egyptians and trapped Governor Gordon in Khartoum. The British launched a relief expedition, but it arrived too late. Such an insult to the Empire could not go unpunished, and the British returned to crush the Mahdists. Sudan then came under British Imperial control, but, like shifting sands, history could have turned out very differently.

Using this Black Powder supplement, you can take charge of the British army fighting in the desert, or assume command of the Mahdi’s forces in their struggle against the world’s greatest military power. Along the way, learn about the battles and campaigns of the Mahdist Wars, and the soldiers who served in them.
!Fleet Commander

;0-1 Marshal
You may include one Marshal in your fleet. If your fleet includes battle barges or venerable battle barges, he must be assigned to one in preference to a strike cruiser. If the fleet is worth over 750pts, the Marshal must be included to lead it.

|Marshal (Ld10) | 50pts |

You may buy Fleet Commander re-rolls for your Marshal.

|One re-roll | 25pts |
|Two re-rolls | 50pts |
|Three re-rolls | 75pts |

In addition, the Marshal's ship may carry Sword Brethren for +50 points.

The Sword Brethren count as a normal Space Marine Terminator boarding party and confer a +1 Boarding Modifier to their assigned ship.

The Marshal's ship may also have the Terminator Teleport Assault. Roll 2D6 when conducting normal teleport attacks and select which one you wish to count for +10 points.

!Capital Ships

!!Battle Barges

You may include up to one Battle Barge in your fleet for every one Strike Cruiser.

|0-1 [[Space Marine Battle Barge]] | 435pts |

You may upgrade the Battle Barge with +1 Shield for +15 points and/or +1 turret for +10 points. Famous Ships: Sigismund's Light.

0-1 Venerable Battle Barge

|[[Despoiler Class Battleship ]] | 410pts (Strength 8 Torpedoes. *representing another class) |
|[[Emperor Class Battleship ]] | 350pts (Strength 6 Torpedoes) |
|[[Styx Class Heavy Cruiser ]] | 280pts (Strength 4 Torpedoes) |
|[[Mars Class Battle Cruiser ]] | 265pts (Strength 6 Torpedoes) |
|[[Oberon Class Battleship ]] | 350pts (Strength 6 Torpedoes) |
|[[Apocalypse Class Battleship ]] | 375pts (Strength 10 Torpedoes) |
|[[Retribution Class Battleship ]] | 390pts (Strength 10 Torpedoes) |
|[[Repulsive Class Grand Cruiser ]] | 250pts (Strength 6 Torpedoes, +1 Shield and Large Flying Base) |

Terminator Teleport Assault: You may purchase the Terminator

Teleport Assault for each Battle Barge at a cost of +10 points per ship (no ship can have this upgrade twice).

;0-1 Forgeships

You may include up to one Forgeship in your fleet only in fleets of over 750pts.

|0-1 Forgeship* | 300pts |

*Less Than Equal.

!!Cruisers

;0-12 Cruisers

You may include up to one cruiser in your fleet for every three Space Marine Escorts.

|[[Strike Cruiser ]] | 155pts |
|[[Strike Cruiser Assault variant ]] |165pts|
|[[Training Vessel (Strike Cruiser)*]] |120pts|

You may not have more training ships than the total number of Strike Cruisers and Strike Cruiser variants.

|[[Strike Cruiser Devastator variant**]] |155pts|

*Less Than Equal,
**Reserve ship, may only have one per 3 other cruisers, not including attendants.

!Escorts

You may include any number of Escorts in your fleet.

!!Space Marine Escorts

|[[Nova Class Frigate ]] | 50pts |
|[[Gladius Class Frigate ]] | 45pts |
|[[Hunter Class Destroyer ]] | 40pts |
|[[Rapid Strike	Vessel	(Firestorm)]] |45pts|
|[[Rapid Strike	Vessel	(Sword) ]] | 40pts |
|[[Rapid Strike	Vessel	(Cobra) ]] | 35pts |

!!Reserve Escorts

You may not have more Reserve Escorts than Space Marine Escorts.

|[[Firestorm Class Frigate* ]] | 40pts |
|[[Sword Class Frigate* ]] | 35pts |
|[[Falchion Class Frigate* ]] | 35pts |
|[[Cobra Class Destroyer* ]] | 30pts |
|[[Iconoclast Class Destroyer* ]] | 30pts |

*Less Than Equal.

!Ordnance 

!!Thunderhawks

All Space Marine Capital Ships with launch bays have Thunderhawks. Training vessels still have Thunderhawks but as stated before don't gain +1 for Hit and Run attacks.

!!Thunderhawk Annihilators

Annihilators act as bombers and fighters with a 4+ save vs. Ordnance (the same as normal Thunderhawks). Annihilators cost +5pts per bay and may be bought for any Space Marine capital ship with launch bays (excluding Attendant vessels).

!!Torpedoes

All ships have normal and boarding torpedoes.

!!Barrage Torpedoes

Battle Barges, Venerable Battle Barges and Devastator Strike Cruisers may have Barrage special torpedoes as well as normal and boarding for +5pts per strength 2 torpedoes.

@@.image-float-right [img width=400 [Blitzkrieg Commander IV.image.cover]] @@<br>







Blitzkrieg Commander is one of the most popular WWII rulesets of the past decade with over 5000 copies sold so far. Our overriding intention with BKC-IV was to show a natural evolution from BCKII, retaining the best elements of BKC-III but at the same time remaining true to both the BKC tradition and the Commander series of rules mechanisms.  In addition, we’ve added new game mechanisms, incorporated several widely used, tried and tested ‘house rules’, as well as tidying up the army lists.  

The design of BKC-IV will allow players to choose between a more formalised and higher-level game, back (almost) to BCKI and BKCII in many ways; or to play a much more granular game, almost but not quite down to a skirmish level or 1:1 level game.  We have also added (by request) more Example Tables, for ease of play and quick reference.

The significant changes are:

*An enhanced and expanded Reconnaissance section – making Recce a more important and integral part of the game.
*Introduction of Snipers and their effect on the battlefield.
*Changes to the way Infantry Anti-Tank Weapons work to make them more cost effective and realistic.
*Changes to the Artillery Barrage rules – to remove a potential for imbalance.
*The correction of an anomaly around Naval Guns and FAOs.
*Adding a new Tactical Doctrine for Guerrillas/Partisans, with additional features to make playing an insurgency or resistance style game possible.
*Re-working and clarifying the Scenarios.
*Adding to, re-wording and editing the list of Special Characteristics.

Rather than a printed QRS supplied with the rules, we've put a pdf download on the Pendraken Forum, for people to print off as many copies as they like.  Along with this we'll be creating a series of pdfs containing a variety of expanded Optional Rules – including Perilous Terrain, Armoured Trains and Refugees amongst many others.  More of these Optional Rules will be added to the archive going forward, as will more Army Lists (an ANZAC list is already on the work-bench!)



<div style="clear: both;">
<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://over-open-sights.blogspot.com/2019/09/sudan-blue-jackets-to-front.html"></iframe>
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Boardgames]]
<<multilevel-toc-expandable tag:"Boardgames" stateTiddler:"state_Boardgames">>
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Bookmarks]]
<<multilevel-toc-expandable tag:"Bookmarks" stateTiddler:"state_Bookmarks">>





!!TiddlyWiki

:https://kookma.github.io/TW-Scripts/

!! 3D Printed Files - Patreon
;LoTR
:https://www.kickstarter.com/projects/qm3d/28mm-alternative-fantasy-miniature-stl-files
::https://northernlightsterrain.com/

;Scatter
:https://www.theprintinggoeseveron.com/shop/chapter-2-freebies/

;Unsorted
:https://rnestudio.com/
:https://www.cgtrader.com/gunslingerstudio
:http://www.bobnaismith.com/
:https://www.myminifactory.com/users/Ghamak
:https://www.myminifactory.com/users/ClayCyanide
:https://www.myminifactory.com/users/3DArtGuy
:https://www.myminifactory.com/users/Raven%20Twin%20Miniatures
:https://gamescape3d.com/wp/
:https://all3dp.com/2/3d-printed-tabletop-stuff-best-sources/

!! Military Equipment
;https://mikesresearch.com/

!! Unit Information
;Fire and Front Battlefront
:https://www.fireandfury.com/extra/unitdatabase.php#title

!!STL Files

!!! French Troops
:https://gumroad.com/l/fsxIR

!!Painting and Hobby Supplies

;Inks
:W&N drawing inks washes

;Water washing
:https://gameenvy.net/product/fresh-water-rinse-cup/

;Best matte sealer in a spray
:https://www.amazon.com/Rust-Oleum-302151-Universal-Surface-Spray/dp/B01J3YYX8S

;Best for Decals
:https://www.amazon.com/gp/product/B01LXZ03W9


!! Epic
:https://epic6mm.com/3d-printed-nurgle-death-guard-02/

;Mail
:[[ProtonMail|https://mail.protonmail.com/login]]
:[[Messages for Web|https://messages.google.com/web/conversations]]
;The Sandman
:https://www.audible.com/pd/The-Sandman-Audiobook/B086WP794Z
;The Midnight Library
:https://www.audible.com/pd/The-Midnight-Library-Audiobook/059334023X
;Cast Under an Alien Sun
:https://www.audible.com/pd/Cast-Under-an-Alien-Sun-Audiobook/B072LKVQJN
;Craig Alanson
:https://www.audible.com/author/Craig-Alanson/B01AIAVB0O
;Eric Van Lustbader
;Namehias Kiss (sp?)
since close shaft emerge zone dragon remove hospital desk nurse east speak pulse ball urban crash build humor bone outside utility tree crowd awesome

!![img[British Forces.image]] [[British Forces of the Battle of Arras]]
<<<
<div class="tc-table-of-contents"><<toc-selective-expandable 'British Forces of the Battle of Arras'>></div>
<$list filter="[tag[British Symbol]]"><h2><$link><$transclude tiddler={{!!icon}}/> <$transclude field="title"/></$link></h2><$transclude mode="block"/></$list>
[img[Bruce Hyde.image]]

Lt. Bruce Hyde, DSO, RN (Reserve) (Poacher, Big Game Hunter) Strength: 5 Intellect:  2 Agility: 5 Charisma: 2 Endurance: 6 Social Level: 1
Skills: Fisticuffs 4, Throwing 3, Close Combat 3 (Edged) Stealth 4, Marksmanship 6 (Rifle), Wilderness Travel 6 (Survival), Fieldcraft 3, Tracking 4, Swimming 3, Obser-vation 2, Science 1 (Physics:Applies only to the use of magnets), Gunnery 1 (Machinegun), Eloquence 1, Linguistics 2 (Parhooni, Koline), Riding 1 (Gashant), Pi-loting 1 (Cloudship), Leadership 1


Bruce Hyde was born in Australia sometime in the mid 1860s. He has no idea who his parents were, and was raised in an orphanage in Sydney until he ran away shortly before his eleventh birthday. He ended up trapping and hunting in the outback, poaching when down on his luck. In 1877, his skill with rifles and familiarity with the outdoors got him a position as a junior gameskeeper on the Governor General’s estate. Bruce was just set-tling in to a somewhat more civilized lifestyle when he mistook the governor’s prize hound for a dingo and dropped it with one “well” placed shot. Not wanting to become the object of the Governor’s well known temper, and knowing that as junior man he would be blamed even if it hadn’t been his fault, Bruce calmly acquired all of the small valuable items he could get his hands on and bought a ticket to the only place he could think of beyond the Governor’s reach — Mars.
Upon his arrival, Bruce discovered that his willingness to spend long periods of time away from the few civilized towns was a real asset. Quite a few rich and well paying big game hunters needed experienced guides, and the fact that Bruce had little more knowledge of Mars than his employers proved to be little obstacle to his new career. While his inexperience cer-tainly contributed to the deaths of several of his employers, none of the dead ones made it back to complain, while all of the satisfied customers were alive to recommend him. In any case, after a few years of winging it, Bruce had managed to learn what he had always claimed to know in the first place, and his reputation grew as more and more of his clients returned with him.
Eventually, Bruce started working for the Royal Geographic Society and other scientific organizations. He considered this quite an improvement over guiding big game hunters, as the scientists didn’t go looking for trouble, and were quite willing to put out the effort to avoid it as long as it wasn’t right on top of the dig site. Bruce was once again settling into a more comfortable lifestyle when he agreed to go on the Thacker Expedition. While the details of the expedition are classified, it was there that he met Mansfield (Mansfield of Mars!) and the well known Mr. Tyler of the Tyler Foundation (for more information on Mr. Tyler, see Issue #2 of TRMGS). After the return of the expedition Bruce was given a reserve commission in the Royal Navy, the Distinguished Service Order, and a full pardon. He also sold a book that he had found to Tyler for £50,000, and used the money to buy a very large ranch back in Australia. Bruce went back to Earth, settled down and to his horror became terribly bored. He then returned to Mars, and used the prof-its from his ranch to live on when there were no interesting jobs available.
Bruce has recently been spotted hanging around the infamous Lord Herring, and has been seen conspicuously eating scones.
PLAYING BRUCE
Bruce is very concerned with his own survival. He does not have any silly upper class beliefs that might interfere with his survival, and would have no problem taking action against someone with such beliefs if they threatened to hurt him. He will not mount hopeless rescue expeditions or bravely sacrifice himself for the group. One of the reasons that he has sur-vived over a dozen expeditions is his ability to know when to run away.
Bruce’s most obvious trait is his tendency to shoot his problems. While he is reluctant to shoot people, he does not act like he is, and his compan-ions often believe that they have dissuaded him from shooting someone when he did not really want to kill them in the first place. On the other hand, if the group does not try to talk him out of shooting someone, he is likely to decide that his desire to kill them is justified and shoot them even though he hadn’t originally planned to. Bruce is not stupid, and will not kill anyone other than O’Reilly when it will get him charged with murder or seriously hamper his own goals. On the other hand, if he is put in a position where he is both mad and facing a gloating enemy (especially one foolish enough to say “you would not dare shoot me because...” ) he will probably blow him away and suffer the consequences.
Other than survival, the only other thing that really motivates Bruce is the desire to improve his social standing. While he would never admit it, Bruce thinks that being invited to the Governor’s mansion (Martian, not Australian) for a formal dance, and showing up in a spiffy uniform or nifty upper class duds is a lot of fun. Another thing to keep in mind is that Bruce will carry his guns with him anywhere he goes unless he is forced to “check them at the door” and trusts the people he is leaving them with. He will also make it a point to wear his uniform anytime he has a good excuse. Finally, Bruce will not relax his guard even with people he is supposedly allied with, and is very slow to trust people with anything important to him.
ABOUT HIS GUNS...
While Bruce owns a pair of .45’s and a ten gauge shotgun, he is not attached to them and considers them replaceable. His “gun”, which he is very attached to, is a double barreled Holland and Holland .600 Nitro Ex-press, which he acquired from one of his unfortunate clients early in his career. He carries 100 rounds for it with him, and keeps it loaded at all times. Bruce recently acquired a new gun from an inventor friend of his. The Temple Covenant Jones Patented Monster Stopper is an .800 caliber over and under, and cannot be fired by anyone with a strength under 5. The stock is made of liftwood so that it is much easier to carry when slung upright.
Bruce has not had many opportunities to use it yet, but is confident that it can take down anything he has ever encountered. He carries 50 rounds of ammunition for the Monster Stopper and has ammunition for both guns stored in several places in Syrtis Major and around Mars. He will not sell either gun under any circumstances, and if they are stolen he will go to any effort to have the culprit “punnished” and to get them back.

GETTING BRUCE INVOLVED
Bruce will go on any expedition that he thinks he has a good chance of living through if it also meets one of the following conditions:
1. He could make a lot of money from it; 2. It could improve his reputation with the British Govern-ment, or a respected British institution; 3. He would get a chance to kill or seri-ously hurt one of his enemies: Col. O’Reilly, the Ger-mans, or the Anti-Scone Society; 4. It looks like a lot of fun.
Note: Colonel O’Reilly is described in Issue #1 of TRMGS; infor-mation on the Anti-Scone Society can be found in the Transac-tions Campaign in this issue. The Ger-mans are, of course, the Germans.
Lt. Bruce Hyde, DSO, RN (Reserve) (Poacher, Big Game Hunter) Strength: 5 Intellect:  2 Agility: 5 Charisma: 2 Endurance: 6 Social Level: 1
Skills: Fisticuffs 4, Throwing 3, Close Combat 3 (Edged) Stealth 4, Marksmanship 6 (Rifle), Wilderness Travel 6 (Survival), Fieldcraft 3, Tracking 4, Swimming 3, Obser-vation 2, Science 1 (Physics:Applies only to the use of magnets), Gunnery 1 (Machinegun), Eloquence 1, Linguistics 2 (Parhooni, Koline), Riding 1 (Gashant), Pi-loting 1 (Cloudship), Leadership 1
;Source
:http://www.paulbaker.org.uk/
;Date
:28 July, Parhoon: 

The Governor of Parhoon has reported to Royal Navy authorities in Syrtis Major that an aerial battle has taken place between two Oenotrian screw galleys and the aerial flyer Penelope, captained by Frederick Gustavus Burnaby. Burnaby, one of the most famous of the Red Captains, submitted a brief note to Her Majesty's authorities which explained his actions. Burnaby, returning to Parhoon for supplies, stated that he was set upon by modified Swiftbird screw galleys which mistook his vessel for a Royal Navy aerial flyer.
Burnaby and his crew drove off one vessel by inflicting crippling damage, and managed to capture a second, while suffering only minor damage in return. This places the number of vessels captured or destroyed by Burnaby at twenty seven. Captured crew members were turned over to Her Majesties' authorities in Parhoon. The captured vessel was estimated to be worth £1000 in salvage.


;Alternate Models
:https://www.midlamminiatures.co.uk/beastmen.html
CAPTAIN WELLESLEY
Captain Sir Evan Wellesley is the grandson of THE Duke of Wellington, and as such, was able to gain a commission in the Navy even though he was a less than optimal candidate. Thicker than a dinosaur souffle, he has never really grasped any of the relevant concepts of leadership or command (or much else). He is also a tad clumsy. Actually, he could win the biggest klutz award from a field of one legged lepers. The only time that he is able to do anything right is when he stops thinking about what he is doing and allows his reflexes to take over. He would, for example be unable to hit a golf ball more than ten feet off of a tee until you came up behind him and shouted a naughty word at him. Suitably distracted, he would probably hit a hole in one, or at least set up an eagle. This unique combination of talents has made him a suitable method of testing and showcasing up and coming young officers. As commander of the Intrepid, it is expected that his presence will allow Commander Purnell to shine without denying the captaincy to any senior officers who would be offended if he were given the job at his lower rank. Wellesley’s command “style”, if you can call it that, consists of giving orders, believing that they are carried out because he is the Captain and what he says goes, inspecting the parts of the ship that the crew will allow him into (he has never seen the inside of a gun turret or an engine room, for example), and losing money at darts to whomever knows better than to distract him mid-throw.
Strength: 3 Intellect:1 Agility:1 Charisma: 5 Endurance: 4 Social Level: 6 Non Default Skills: Close Combat 1, Marksmanship 2, Linguistics 2 (French, Latin), Piloting Ether Ship 4, Leadership 2 (out of sympathy, own crew only), Medicine 2 (Limited to first aid, and nobody who knows him will let him try that much.) Renown: Military 3* (For Oafdom) Lowest possible rank, Order of the Garter.
The Abyss-class Battleships were a triumvirate of unique Imperial battleships of special configuration secretly constructed for the Word Bearers Legion by the Dark Mechanicum faction of the ancient Mechanicum in the days just before the outbreak of the Horus Heresy in the early 31st Millennium.

The Furious Abyss, the first ship of its class, was built in the Jovian shipyards of Thule which orbited the gas giant of Jupiter in the Sol System in the early 31st Millennium. Its sister ships, the Blessed Lady and the Trisagion, were constructed at the same time in an undisclosed location.

These vessels were constructed in secret during the latter years of the Great Crusade by the Renegade Mechanicum faction loyal to Kelbor-Hal, the traitorous Fabricator-General of Mars' ancient Mechanicum.

These vessels were always intended for use by the Word Bearers Space Marine Legion, who were secretly ordered by the rebellious Warmaster Horus to bring their unfettered wrath down upon their hated rivals, the Ultramarines Legion.

The Furious Abyss was to play an instrumental role in the Battle of Calth and the Traitor Legions' destructive campaign into the Realm of Ultramar. 
;.stl Model
:Chaos Devastation Class Cruiser.stl
|!Chaos Hubris Class Heavy Cruiser |<|<|!Armament |!Range<br>Speed|!Firepower<br>Strength|!Fire Arc|
|!Type | Cruiser/8 |[img height=200 [Chaos Hubris Class Heavy Cruiser.image]] |!Port Weapons Battery | 30cm | 8 |Left |
|!Hits | Cruiser/8 |~|!Starboard Weapons Battery | 30cm | 8 |Starboard |
|!Speed | 30cm |~|!Port Torpedoes | 30cm | 3 |Left |
|!Turns | 45° |~|!Starboard Torpedoes | 30cm | 3 |Right |
|!Shields | 2 |~|!Dorsal Weapons Battery | 30cm | 6 |Left/Right Turret |
|!Armor | 5+ |~|!Prow Weapons Battery | 30cm | 6 |Left/Right Turret |
|!Turrets | 2 |~|! |  |  | |

;Chosen of Khorne
:As part of its cost, this vessel embarks Chaos Space Marines with the Mark of Khorne, following all rules for Chaos Space Marines. If it is not the flagship, a Chaos Lord must lead it.
;Ramming Prow
:Hubris class heavy Cruisers always rolls 2 more dice to damage an opposing ship it rams.
;Boarding Hooks
:After dealing at least 1 damage to the rammed ship, you may stay in base contact with this ship and make a boarding attempt as normal.
;Broadside tubes
:Hubris class heavy cruiser cannot combine the salvoes from port and starboard torpedo tubes. It's also doesn't need to use separate Reload Ordnance special orders to reload each launcher - they both are reloading simultaneously after any Reload Ordnance order.
;Tractor Fields
:This vessels are always equipped with tractor fields.
;Special Rules
:Hubris class heavy cruiser add on extra -1D6cm to their speed when on [[All Ahead Full]] special orders.

The new orbital shipyards around Sarum became an apogee of the long last work of the Dark Mechanicus of Hell-Forge Sarum. When the Maelstrom was finally absorbed by the Great Rift, renegade magi could finally end their malignant ritual, heralding a rebirth for the fleet of Chaos Space Marines.

First of the Traitor forces, who could receive the benefits of cooperating with Dark Mechanicus was numerous remnants of World Eaters Legion. Many descendants of Angron had been used the Sarum as their operation base since the times of the Great Crusade.

There are no exact information about who from the Chaos Lords had ordered the laying of the Hubris cruisers. However from the beginning of the M42 the number of encounters with the Hubris cruisers became so big that those vessels and the raising activity of Space Marines who still bears the banner of XII^^th^^ Legion couldn't become unnoticed by Ultima Segementum Navy.

Most commonly, this Chaos vessels act as a flagship for small fleets. Tor their terrifying ability to destroy a battleship with a single successful ramming attack. Even those ships that survive the first attack of the Hubris cruiser usually became a victim of boarding parties led by Khorne Berserkers and Terminators of the World Eaters.

;Sector
:Gothic Sector

!Fleet Commander

;1 Chaos Warmaster 

You must include a Chaos Warmaster in your fleet, even if it is worth 750 points or less. He must be assigned to the biggest (ie, most expensive) ship and improves its Leadership to the value shown below.

|Chaos Warmaster (Ld 8 )  | 50 pts |
|Chaos Warmaster (Ld9)  | 100 pts |

Chaos Warmasters get one re-roll. In addition they may be given up to four Marks of Chaos as shown below (no Mark may be taken more than once).

|The Mark of Slaanesh | +25 pts |The Chaos Warmaster is accompanied by the dissonant, siren cry of the Daemons of Slaanesh, the prince of pain and pleasure. Enemy ships within 15cm of the Chaos Warmaster’s ship suffer -2 to their Leadership value. |
|The Mark of Khome | +20 pts |The Chaos Warmaster and his followers chant their prayers to Khome as they await the opportunity to spill blood in hand-to-hand conflict. The Chaos Warmaster’s ship doubles its value in boarding actions and adds +1 to any rolls for inflicting critical damage in a boarding action. |
|The Mark of Tzeentch | +30 pts |The Chaos Warmaster benefits from the patronage of the Changer of Ways, his Daemonic prescience giving him command of the Fates. The Chaos Warmaster gains an extra re-roll. |
|The Mark of Nurgle | +35 pts |The Chaos Warmaster’s ship is rank with putrescence and his followers bear the awful marks of morbidity and decay. The Chaos Warmaster’s ship gains 1 damage point and may not be boarded. |

;0-3 Chaos Lords 

You may include up to three Chaos Lords in your fleet. Each Chaos Lord must be assigned a ship and improves its Leadership rating to the value shown.

|Chaos Lord (Ld 8) | 50 pts |

A Chaos Lord may be given up to one of the following Marks of Chaos.

|The Mark of Slaanesh | +25 pts |Enemy ships within 15cm of the Chaos Lord’s ship suffer -2 to their Leadership value.<br>The Mark of Slaanesh is an area effect that is not affected by line of sight obstructions. |
|The Mark of Khome | +20 pts |The Chaos Lord’s ship doubles its value in boarding actions. |
|The Mark of Tzeentch | +30 pts |The Chaos Lord gains a re-roll. |
|The Mark of Nurgle | +35 pts |The Chaos Lord’s ship gains a damage point and may not be boarded. |


!Capital Ships

!!Battleships 

You may include up to one battleship in your fleet for every three cruisers or heavy cruisers.

|Chaos Despoiler Class Battleship | 400 pts |
|Chaos Desolator Class Battleship | 300 pts |

!!Grand Cruisers 

You may include up to one grand cruiser in your fleet for every three cruisers or heavy cruisers.

|Chaos Repulsive Class Grand Cruiser | 230 pts |


!!Heavy Cruisers 

You may include up to one heavy cruiser in your fleet for every two cruisers.

|Chaos Styx Class Heavy Cruiser | 290 pts |
|Chaos Hades Class Heavy Cruiser | 200 pts |
|Chaos Acheron Class Heavy Cruiser | 190 pts |


!!Cruisers

0-12 Cruisers 

|[[Chaos Devastation Class Cruiser]] | 190 pts |
|Chaos Murder Class Cruiser | 170 pts |
|Chaos Camage Class Cruiser | 180 pts |
|Chaos Slaughter Class Cruiser | 165 pts |

!Escorts

You can include any number of Escorts in your fleet.

|Chaos Idolater Class Raider | 45 pts |
|Chaos Infidel Class Raider | 40 pts |
|Chaos Iconoclast Class Destroyer | 30 pts |

!Ordnance

Ships with launch bays can have a mixture of Swiftdeath fighters, Doomfire bombers or Dreadclaw assault craft. Ships with torpedo tubes are armed with normal and boarding torpedoes.
The Chaos Repulsive-class Grand Cruiser was a precursor to the Battlecruisers which are now more prevalent in most Imperial Navy fleets. Originally designated a Corinus-class Grand Cruiser by the Imperium of Man, this class of vessel almost rivaled true Battleships in its ability to withstand damage and lay down a barrage of fire.

The Grand Cruiser ultimately fell out of favour when the means for constructing sufficiently powerful plasma engines was lost by the Imperium over the millennia as more recent plasma drives are incapable of generating enough thrust to attain a useful combat speed for such a large vessel. 

In the superstitious and hidebound realm of Imperial starship construction, entire classes of vessel can come to be regarded as cursed since the design stage. Spacefarers mutter that these starships are star-crossed, prone to dragging entire crews with them into the Warp at a moment's notice, there to leave them starving or bedevilled, until the ship re-emerges in the Eye of Terror, ready to serve the twisted lords of Chaos.

This dark reputation has followed the Grand Cruisers of the Repulsive-class, originally known as the Corinus-class since their inception in the Imperium's early days. A disturbingly large number of the Repulsives have turned Traitor or been captured into the Archenemy's service since the class became operational -- so many that some have forgotten the ships were originally constructed in the Emperor's service.

This is a tragedy indeed for the Imperium, for these are graceful and powerful warships, with a radically different weapons configuration from all other known Grand Cruisers, fully realising the ancient doctrine of a fast and manoeuvrable heavy warship. Their design cannot be duplicated, as the secrets of constructing powerful-enough plasma drives has since been lost to the Adeptus Mechanicus. Only a handful of these warship hulls remain uncorrupted by the powers of the Immaterium, and these are either mothballed, sealed, and guarded in the Reserve Fleets of the various Segmentum Fortresses, or under the command of certain extremely powerful Rogue Traders.

The story of how the Corinus-class became known instead as the Repulsive-class is little known. When the first variants of the original Corinus-class reappeared in the sporadic warfare of later centuries, they had been changed by the heavy Warp contamination of the Eye of Terror, sporting modifications and eruptions that baffled, excited and appalled the Tech-priests who studied them.

One unnamed scholar, toiling away in some obscure Forge World's record collation citadel, amended his report on these studies, changing the term Corinus to Repulsive, possibly as some recondite form of Martian humour. The Mechanicus, not being a humorous order, took up the emendation as purely literal, and like some spreading organic virus, it became the preferred classification for what remained a rare class of warship within Imperial zones of control and a more common one among the forces of Chaos.

A few ancient Grand Cruisers of various classes can still be found in the reserve fleets of the Segmentum Obscurus and Segmentum Pacificus, but they are largely obsolete. Of the 25 Grand Cruisers believed to have abandoned the Emperor of Mankind for the service of the Dark Gods since the inception of the ship type in the 34th Millennium, roughly a dozen have yet to be recaptured or destroyed.

Of those still at large, the Foe-Reaper is the most active, having been sighted in over a score of major fleet engagements in the 23 standard centuries since her corruption by the Ruinous Powers. Most infamously, it was the Foe-Reaper which destroyed the Adeptus Mechanicus facility on AFR-74, killing 50,000 Adepts within a few heartbeats, when a salvo of specially-modified torpedoes shattered the eco-shield protecting the inhabitants from the metha-nitrous atmosphere of that satellite. 

!!Notable Repulsive-class Grand Cruisers

;Bloodied Sword
;    Bringer of Despair
;    Foe-Reaper
;    Solace
:When this warship's hull was originally laid down in the 34th Millennium on the Forge World of Lashte, it was named Undying Valour. It entered service with Battlefleet Archon less than a Terran year after structure completion, commanded by an inexperienced captain named Lutrecia Prask. Its complement of more than thirty thousand ratings was largely drawn from Imperial Navy levy stations strung out beyond the Mourn Ring, and was graded as competent by four subsequent inspection visits. Like all the original Corinus-class Grand Cruisers, it was heavily armed, with Lance and Macrocannon arrays out of proportion to its relatively underweight Void Shielding. It transpired that the class gradually fell out of favour with Imperial commanders, though the Undying Valour served with distinction for another five hundred Terran years, gaining a kill ratio marginally higher than its reputation indicated likely. Captain Prask died in an engagement less than twenty standard years after assuming command, and was replaced by a succession of captains promoted from the lower decks. A Grand Cruiser was a world of its own, and only the very greatest Battleships regularly recruited senior officers from outside the hull -- most captains were born, raised and trained on the ship they would later command. The last of the line, Orthan Hemmo, was of this tradition, and was said to have loved the ship more than his own children, of which there were twenty before circumstances intervened to curtail his commendable contribution to the replenishment of Imperial numbers.Those circumstances came at the Battle of the Borghesh Channel, a vicious encounter in which the Imperium lost twenty vessels and had its grip loosened on three sub-sectors. By the time Imperial Navy retribution fleets overwhelmed the region more than sixty standard years later, there was no sign of the Undying Valour at its last reported coordinates -- only a slowly spinning core of metal to which Captain Hemmo's deep-frozen corpse was, it was rumoured later, nailed on tight. In truth, the Undying Valour had been taken into the Eye of Terror and stayed there for five Terran millennia. It was renamed the Solace after it became corrupted by the power of Nurgle, which made the ship semi-sentient. It was eventually taken by the Chaos Lord Vorx, commander of the Heretic Astartes warband of the Death Guard called the Lords of Silence, who ensured that the corrupted ship was placated with plenty of flesh and blood, in order to prevent the Solace from turning upon its own warriors. However this did not stop the Solace from occasionally growing tentacles in order to attack and devour members of the warband.


Chocolatey aims to automate the entire software lifecycle from install through upgrade and removal on Windows operating systems. We aim to simplify complex processes through a single unifying interface allowing you to control the chaos. 

;Recommended Packages

```


Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
```

; Close and Reopen Powershell as Admin
```
choco feature enable -n allowGlobalConfirmation

choco install alldup
choco install gimp
choco install irfanview
choco install irfanview-shellextension
choco install irfanviewplugins
choco install notepadplusplus --x86
choco install npppluginmanager
choco install winrar
choco install autohotkey
choco install ditto
choco install greenshot
choco install audacity
choco install ffmpeg
choco install nodejs
choco install httrack
choco install inkscape
choco install macrocreator
choco install remove-empty-directories
choco install keepassxc
choco install libreoffice-fresh
choco install libreoffice-help

npm install -g tiddlywiki
```

; Others

```
choco install treesizefree
choco install mp3tag

```


<td bgcolor=81491E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Balthasar Gold''<br>&emsp;Citadel<br>&emsp;21-29
<td bgcolor=A16E41 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Retributor Armour''<br>&emsp;Citadel<br>&emsp;21-35
<td bgcolor=0686B3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Thousand Sons Blue''<br>&emsp;Citadel<br>&emsp;21-36
<td bgcolor=978650 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Death Guard Green''<br>&emsp;Citadel<br>&emsp;21-37
<td bgcolor=D7CBB3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ionrach Skin''<br>&emsp;Citadel<br>&emsp;21-38
<td bgcolor=480F53 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Phoenician Purple''<br>&emsp;Citadel<br>&emsp;21-39
<td bgcolor=4A4C3F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Death Korps Drab''<br>&emsp;Citadel<br>&emsp;21-40
<td bgcolor=56323E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gal Vorbak Red''<br>&emsp;Citadel<br>&emsp;21-41
<td bgcolor=003561 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Night Lords Blue''<br>&emsp;Citadel<br>&emsp;21-42
<td bgcolor=1D322B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nocturne Green''<br>&emsp;Citadel<br>&emsp;21-43
<td bgcolor=1D1D1B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Corvus Black''<br>&emsp;Citadel<br>&emsp;21-44
<td bgcolor=002C2F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lupercal Green''<br>&emsp;Citadel<br>&emsp;21-45
<td bgcolor=9B9FA0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Iron Hands Steel''<br>&emsp;Citadel<br>&emsp;21-46
<td bgcolor=9ECBE6 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Grey Knights Steel''<br>&emsp;Citadel<br>&emsp;21-47
<td bgcolor=49413E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Iron Warriors''<br>&emsp;Citadel<br>&emsp;21-48
<td bgcolor=4F283B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Barak-Nar Burgandy''<br>&emsp;Citadel<br>&emsp;21-49
<td bgcolor=4F3830 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Catachan Fleshtone''<br>&emsp;Citadel<br>&emsp;21-50
<td bgcolor=CAB580 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Morghast Bone''<br>&emsp;Citadel<br>&emsp;21-51
<td bgcolor=ECECEC style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Corax White''<br>&emsp;Citadel<br>&emsp;21-52
<td bgcolor=E6DBBD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wraithbone''<br>&emsp;Citadel<br>&emsp;21-53
<td bgcolor=C6C6C6 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Grey Seer''<br>&emsp;Citadel<br>&emsp;21-54
<td bgcolor=9A8777 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Runelord Brass''<br>&emsp;Citadel<br>&emsp;21-55
<td bgcolor=BA8C3B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Liberator Gold''<br>&emsp;Citadel<br>&emsp;22-71
<td bgcolor=096D8F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ahriman Blue''<br>&emsp;Citadel<br>&emsp;22-76
<td bgcolor=D4D4C6 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deepkin Flesh''<br>&emsp;Citadel<br>&emsp;22-77
<td bgcolor=7FC1A5 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gauss Blaster Green''<br>&emsp;Citadel<br>&emsp;22-78
<td bgcolor=54BDCA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Baharroth Blue''<br>&emsp;Citadel<br>&emsp;22-79
<td bgcolor=FFF55A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dorn Yellow''<br>&emsp;Citadel<br>&emsp;22-80
<td bgcolor=F3ABCA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Fulgrim Pink''<br>&emsp;Citadel<br>&emsp;22-81
<td bgcolor=B598C9 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dechala Lilac''<br>&emsp;Citadel<br>&emsp;22-82
<td bgcolor=BCBB7E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Krieg Khaki''<br>&emsp;Citadel<br>&emsp;22-83
<td bgcolor=9EB5CE style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue Horror''<br>&emsp;Citadel<br>&emsp;22-84
<td bgcolor=F69B82 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lugganath Orange''<br>&emsp;Citadel<br>&emsp;22-85
<td bgcolor=9171B0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Kakophoni Purple''<br>&emsp;Citadel<br>&emsp;22-86
<td bgcolor=00576B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sons of Horus Green''<br>&emsp;Citadel<br>&emsp;22-87
<td bgcolor=FFE001 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Phalanx Yellow''<br>&emsp;Citadel<br>&emsp;22-88
<td bgcolor=8A645F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Castellax Bronze''<br>&emsp;Citadel<br>&emsp;22-89
<td bgcolor=2F4634 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Vulkan Green''<br>&emsp;Citadel<br>&emsp;22-90
<td bgcolor=660A0F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Word Bearers Red''<br>&emsp;Citadel<br>&emsp;22-91
<td bgcolor=6A4848 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bloodreaver Flesh''<br>&emsp;Citadel<br>&emsp;22-92
<td bgcolor=996563 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Knight-questor Flesh''<br>&emsp;Citadel<br>&emsp;22-93
<td bgcolor=AF9690 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Canoptek Alloy''<br>&emsp;Citadel<br>&emsp;22-94
<td bgcolor=DD482A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Astorath Red''<br>&emsp;Citadel<br>&emsp;23-17
<td bgcolor=75A7D1 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Hoeth Blue''<br>&emsp;Citadel<br>&emsp;23-18
<td bgcolor=83A6CE style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Chronus Blue''<br>&emsp;Citadel<br>&emsp;23-19
<td bgcolor=67AFD0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Imrik Blue''<br>&emsp;Citadel<br>&emsp;23-20
<td bgcolor=94BDCF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stormfang''<br>&emsp;Citadel<br>&emsp;23-21
<td bgcolor=FCFBFA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wrack White''<br>&emsp;Citadel<br>&emsp;23-22
<td bgcolor=96C645 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Niblit Green''<br>&emsp;Citadel<br>&emsp;23-24
<td bgcolor=B8CC82 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nurgling Green''<br>&emsp;Citadel<br>&emsp;23-25
<td bgcolor=C2804F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Golgfag Brown''<br>&emsp;Citadel<br>&emsp;23-26
<td bgcolor=A26954 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Verminlord Hide''<br>&emsp;Citadel<br>&emsp;23-27
<td bgcolor=AC8262 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sylvaneth Bark''<br>&emsp;Citadel<br>&emsp;23-28
<td bgcolor=919B9F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dawnstone''<br>&emsp;Citadel<br>&emsp;23-29
<td bgcolor=C6A86C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sigmarite''<br>&emsp;Citadel<br>&emsp;23-30
<td bgcolor=DBD5E6 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Slaanesh Grey''<br>&emsp;Citadel<br>&emsp;23-31
<td bgcolor=6C9AA7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Thunderhawk Blue''<br>&emsp;Citadel<br>&emsp;23-32
<td bgcolor=67080B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blood for the Blood God''<br>&emsp;Citadel<br>&emsp;27-05
<td bgcolor=6CB79E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nihilakh Oxide''<br>&emsp;Citadel<br>&emsp;27-06
<td bgcolor=9B8F22 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nurgle's Rot''<br>&emsp;Citadel<br>&emsp;27-09
<td bgcolor=3A6B7A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nighthaunt Gloom''<br>&emsp;Citadel<br>&emsp;27-19
<td bgcolor=028E38 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Hexwraith Flame''<br>&emsp;Citadel<br>&emsp;27-20
<td bgcolor=49AD33 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tesseract Glow''<br>&emsp;Citadel<br>&emsp;27-35
<td bgcolor=49AD33 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tesseract Glow''<br>&emsp;Citadel<br>&emsp;27-36
<td bgcolor=FEC830 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Iyanden Yellow''<br>&emsp;Citadel<br>&emsp;29-10
<td bgcolor=EC6337 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gryph-hound Orange''<br>&emsp;Citadel<br>&emsp;29-11
<td bgcolor=C11628 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blood Angels Red''<br>&emsp;Citadel<br>&emsp;29-12
<td bgcolor=8B1416 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flesh Tearers Red''<br>&emsp;Citadel<br>&emsp;29-13
<td bgcolor=920144 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Volupus Pink''<br>&emsp;Citadel<br>&emsp;29-14
<td bgcolor=5B3F70 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Shyish Purple''<br>&emsp;Citadel<br>&emsp;29-15
<td bgcolor=C3ACC6 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Magos Purple''<br>&emsp;Citadel<br>&emsp;29-16
<td bgcolor=00355F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Leviadon Blue''<br>&emsp;Citadel<br>&emsp;29-17
<td bgcolor=275788 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ultramarines Blue''<br>&emsp;Citadel<br>&emsp;29-18
<td bgcolor=007FA0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Akhelian Green''<br>&emsp;Citadel<br>&emsp;29-19
<td bgcolor=005246 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Angels Green''<br>&emsp;Citadel<br>&emsp;29-20
<td bgcolor=DD9C00 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nazdreg Yellow''<br>&emsp;Citadel<br>&emsp;29-21
<td bgcolor=008431 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ork Flesh''<br>&emsp;Citadel<br>&emsp;29-22
<td bgcolor=659676 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Creed Camo''<br>&emsp;Citadel<br>&emsp;29-23
<td bgcolor=9FA050 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Militarum Green''<br>&emsp;Citadel<br>&emsp;29-24
<td bgcolor=D5BF73 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Aggaros Dunes''<br>&emsp;Citadel<br>&emsp;29-25
<td bgcolor=C37203 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Skeleton Horde''<br>&emsp;Citadel<br>&emsp;29-26
<td bgcolor=B66E19 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Snakebite Leather''<br>&emsp;Citadel<br>&emsp;29-27
<td bgcolor=943C04 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gore-grunta Fur''<br>&emsp;Citadel<br>&emsp;29-28
<td bgcolor=794D4A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cygor Brown''<br>&emsp;Citadel<br>&emsp;29-29
<td bgcolor=715551 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wyldwood''<br>&emsp;Citadel<br>&emsp;29-30
<td bgcolor=BF796D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Fyreslayer Flesh''<br>&emsp;Citadel<br>&emsp;29-31
<td bgcolor=D5A79A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Guilliman Flesh''<br>&emsp;Citadel<br>&emsp;29-32
<td bgcolor=E0B797 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Darkoath Flesh''<br>&emsp;Citadel<br>&emsp;29-33
<td bgcolor=F7FCFF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Apothecary White''<br>&emsp;Citadel<br>&emsp;29-34
<td bgcolor=ADCCDE style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gryph-Charger Grey''<br>&emsp;Citadel<br>&emsp;29-35
<td bgcolor=92B2CB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Space Wolves Grey''<br>&emsp;Citadel<br>&emsp;29-36
<td bgcolor=9D9D9D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Basilicanum Grey''<br>&emsp;Citadel<br>&emsp;29-37
<td bgcolor=6F6F6F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Black Templar''<br>&emsp;Citadel<br>&emsp;29-38
<td bgcolor=017BC4 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Talassar Blue''<br>&emsp;Citadel<br>&emsp;29-39
<td bgcolor=1C9A53 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Warp Lightning''<br>&emsp;Citadel<br>&emsp;29-40
<td bgcolor=84C0CB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Aethermatic Blue''<br>&emsp;Citadel<br>&emsp;29-41
<td bgcolor=CCD1A9 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Plaguebearer Flesh''<br>&emsp;Citadel<br>&emsp;29-42
<td bgcolor=0193AA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Terradon Turquoise''<br>&emsp;Citadel<br>&emsp;29-43
<td bgcolor=FFFFFF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ceramite White''<br>&emsp;Citadel<br>&emsp;9001
<td bgcolor=FCB912 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Averland Sunset''<br>&emsp;Citadel<br>&emsp;9002
<td bgcolor=E62714 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Jokaero Orange''<br>&emsp;Citadel<br>&emsp;9003
<td bgcolor=9C130B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Mephiston Red''<br>&emsp;Citadel<br>&emsp;9004
<td bgcolor=6A0001 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Khorne Red''<br>&emsp;Citadel<br>&emsp;9005
<td bgcolor=3D3354 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Naggaroth Night''<br>&emsp;Citadel<br>&emsp;9006
<td bgcolor=696684 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Daemonette Hide''<br>&emsp;Citadel<br>&emsp;9007
<td bgcolor=002151 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Kantor Blue''<br>&emsp;Citadel<br>&emsp;9008
<td bgcolor=0D407F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Macragge Blue''<br>&emsp;Citadel<br>&emsp;9009
<td bgcolor=396E9E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Caledor Sky''<br>&emsp;Citadel<br>&emsp;9010
<td bgcolor=074863 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stegadon Scale Green''<br>&emsp;Citadel<br>&emsp;9011
<td bgcolor=0B474A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Incubi Darkness''<br>&emsp;Citadel<br>&emsp;9012
<td bgcolor=00401F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Caliban Green''<br>&emsp;Citadel<br>&emsp;9013
<td bgcolor=1F5429 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Waaagh! Flesh''<br>&emsp;Citadel<br>&emsp;9014
<td bgcolor=314821 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Castellan Green''<br>&emsp;Citadel<br>&emsp;9015
<td bgcolor=5C6730 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Death World Forest''<br>&emsp;Citadel<br>&emsp;9016
<td bgcolor=9E915C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Zandri Dust''<br>&emsp;Citadel<br>&emsp;9017
<td bgcolor=5E5134 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Steel Legion Drab''<br>&emsp;Citadel<br>&emsp;9018
<td bgcolor=834F44 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bugman's Glow''<br>&emsp;Citadel<br>&emsp;9019
<td bgcolor=AD6B4C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ratskin Flesh''<br>&emsp;Citadel<br>&emsp;9020
<td bgcolor=640909 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Mournfang Brown''<br>&emsp;Citadel<br>&emsp;9021
<td bgcolor=72491E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''XV-88''<br>&emsp;Citadel<br>&emsp;9022
<td bgcolor=493435 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rhinox Hide''<br>&emsp;Citadel<br>&emsp;9023
<td bgcolor=33312D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dryad Bark''<br>&emsp;Citadel<br>&emsp;9024
<td bgcolor=3D4B4D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Mechanicus Standard Grey''<br>&emsp;Citadel<br>&emsp;9025
<td bgcolor=90A8A8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Celestra Grey''<br>&emsp;Citadel<br>&emsp;9026
<td bgcolor=231F20 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Abaddon Black''<br>&emsp;Citadel<br>&emsp;9027
<td bgcolor=A29E91 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rakarth Flesh''<br>&emsp;Citadel<br>&emsp;9028
<td bgcolor=436174 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''The Fang''<br>&emsp;Citadel<br>&emsp;9029
<td bgcolor=7C1645 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Screamer Pink''<br>&emsp;Citadel<br>&emsp;9030
<td bgcolor=505B5E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Leadbelcher''<br>&emsp;Citadel<br>&emsp;9031
<td bgcolor=8F5A32 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Balthasar Gold''<br>&emsp;Citadel<br>&emsp;9032
<td bgcolor=B14E20 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Screaming Bell''<br>&emsp;Citadel<br>&emsp;9033
<td bgcolor=624A4A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Warplock Bronze''<br>&emsp;Citadel<br>&emsp;9034
<td bgcolor=FFFFFF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''White Scar''<br>&emsp;Citadel<br>&emsp;9035
<td bgcolor=FFDA00 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yriel Yellow''<br>&emsp;Citadel<br>&emsp;9036
<td bgcolor=FFF200 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flash Gitz Yellow''<br>&emsp;Citadel<br>&emsp;9037
<td bgcolor=F36D2D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Troll Slayer Orange''<br>&emsp;Citadel<br>&emsp;9038
<td bgcolor=F58652 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Fire Dragon Bright''<br>&emsp;Citadel<br>&emsp;9039
<td bgcolor=C2191F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Evil Sunz Scarlet''<br>&emsp;Citadel<br>&emsp;9040
<td bgcolor=EA2F28 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wild Rider Red''<br>&emsp;Citadel<br>&emsp;9041
<td bgcolor=8C0A0C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wazdakka Red''<br>&emsp;Citadel<br>&emsp;9042
<td bgcolor=AA4F44 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Squig Orange''<br>&emsp;Citadel<br>&emsp;9043
<td bgcolor=471F5F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Xereus Purple''<br>&emsp;Citadel<br>&emsp;9044
<td bgcolor=7761AB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Genestealer Purple''<br>&emsp;Citadel<br>&emsp;9045
<td bgcolor=6B6A74 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Warpfiend Grey''<br>&emsp;Citadel<br>&emsp;9046
<td bgcolor=8E8C97 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Slaanesh Grey''<br>&emsp;Citadel<br>&emsp;9047
<td bgcolor=295788 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Alaitoc Blue''<br>&emsp;Citadel<br>&emsp;9048
<td bgcolor=4C7FB4 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Hoeth Blue''<br>&emsp;Citadel<br>&emsp;9049
<td bgcolor=1F56A7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Altdorf Guard Blue''<br>&emsp;Citadel<br>&emsp;9050
<td bgcolor=4272B8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Calgar Blue''<br>&emsp;Citadel<br>&emsp;9051
<td bgcolor=317EC1 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Teclis Blue''<br>&emsp;Citadel<br>&emsp;9052
<td bgcolor=34A2CF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lothern Blue''<br>&emsp;Citadel<br>&emsp;9053
<td bgcolor=0B6974 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sotek Green''<br>&emsp;Citadel<br>&emsp;9054
<td bgcolor=339A8D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Temple Guard Blue''<br>&emsp;Citadel<br>&emsp;9055
<td bgcolor=038C67 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Kabalite Green''<br>&emsp;Citadel<br>&emsp;9056
<td bgcolor=30A56C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sybarite Green''<br>&emsp;Citadel<br>&emsp;9057
<td bgcolor=1E7331 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Warpstone Glow''<br>&emsp;Citadel<br>&emsp;9058
<td bgcolor=52B244 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Moot Green''<br>&emsp;Citadel<br>&emsp;9059
<td bgcolor=3E805D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Warboss Green''<br>&emsp;Citadel<br>&emsp;9060
<td bgcolor=5F9370 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Skarsnik Green''<br>&emsp;Citadel<br>&emsp;9061
<td bgcolor=50702D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Loren Forest''<br>&emsp;Citadel<br>&emsp;9062
<td bgcolor=628126 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Straken Green''<br>&emsp;Citadel<br>&emsp;9063
<td bgcolor=849C63 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nurgling Green''<br>&emsp;Citadel<br>&emsp;9064
<td bgcolor=748F39 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Elysian Green''<br>&emsp;Citadel<br>&emsp;9065
<td bgcolor=9DA94B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ogryn Camo''<br>&emsp;Citadel<br>&emsp;9066
<td bgcolor=BBBB7F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ushabti Bone''<br>&emsp;Citadel<br>&emsp;9067
<td bgcolor=D2D4A2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Screaming Skull''<br>&emsp;Citadel<br>&emsp;9068
<td bgcolor=A67610 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tallarn Sand''<br>&emsp;Citadel<br>&emsp;9069
<td bgcolor=BB9662 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Karak Stone''<br>&emsp;Citadel<br>&emsp;9070
<td bgcolor=C77958 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cadian Fleshtone''<br>&emsp;Citadel<br>&emsp;9071
<td bgcolor=D6A875 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Kislev Flesh''<br>&emsp;Citadel<br>&emsp;9072
<td bgcolor=D38A57 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bestigor Flesh''<br>&emsp;Citadel<br>&emsp;9073
<td bgcolor=D6A766 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ungor Flesh''<br>&emsp;Citadel<br>&emsp;9074
<td bgcolor=90490F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Skrag Brown''<br>&emsp;Citadel<br>&emsp;9075
<td bgcolor=B36853 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deathclaw Brown''<br>&emsp;Citadel<br>&emsp;9076
<td bgcolor=BF6E1D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tau Light Ochre''<br>&emsp;Citadel<br>&emsp;9077
<td bgcolor=8B5910 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Balor Brown''<br>&emsp;Citadel<br>&emsp;9078
<td bgcolor=DDA026 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Zamesi Desert''<br>&emsp;Citadel<br>&emsp;9079
<td bgcolor=5D0009 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Doombull Brown''<br>&emsp;Citadel<br>&emsp;9080
<td bgcolor=883636 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tuskgor Fur''<br>&emsp;Citadel<br>&emsp;9081
<td bgcolor=654741 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gorthor Brown''<br>&emsp;Citadel<br>&emsp;9082
<td bgcolor=937F6D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Baneblade Brown''<br>&emsp;Citadel<br>&emsp;9083
<td bgcolor=70756E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dawnstone''<br>&emsp;Citadel<br>&emsp;9084
<td bgcolor=949B95 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Administratum Grey''<br>&emsp;Citadel<br>&emsp;9085
<td bgcolor=4A4F52 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Eshin Grey''<br>&emsp;Citadel<br>&emsp;9086
<td bgcolor=3B5150 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Reaper''<br>&emsp;Citadel<br>&emsp;9087
<td bgcolor=417074 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Thunderhawk Blue''<br>&emsp;Citadel<br>&emsp;9088
<td bgcolor=47413B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Skavenblight Dinge''<br>&emsp;Citadel<br>&emsp;9089
<td bgcolor=736B65 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stormvermin Fur''<br>&emsp;Citadel<br>&emsp;9090
<td bgcolor=C7E0D9 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ulthuan Grey''<br>&emsp;Citadel<br>&emsp;9091
<td bgcolor=CDCEBE style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pallid Wych Flesh''<br>&emsp;Citadel<br>&emsp;9092
<td bgcolor=547588 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russ Grey''<br>&emsp;Citadel<br>&emsp;9093
<td bgcolor=719BB7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Fenrisian Grey''<br>&emsp;Citadel<br>&emsp;9094
<td bgcolor=90305D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pink Horror''<br>&emsp;Citadel<br>&emsp;9095
<td bgcolor=B94278 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Emperor's Children''<br>&emsp;Citadel<br>&emsp;9096
<td bgcolor=788286 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ironbreaker''<br>&emsp;Citadel<br>&emsp;9097
<td bgcolor=A3B2BC style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Runefang Steel''<br>&emsp;Citadel<br>&emsp;9098
<td bgcolor=C17324 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gehenna's Gold''<br>&emsp;Citadel<br>&emsp;9099
<td bgcolor=E0A532 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Auric Armour''<br>&emsp;Citadel<br>&emsp;9100
<td bgcolor=A1551D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Hashut Copper''<br>&emsp;Citadel<br>&emsp;9101
<td bgcolor=A88354 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sycorax Bronze''<br>&emsp;Citadel<br>&emsp;9102
<td bgcolor=92561E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brass Scorpion''<br>&emsp;Citadel<br>&emsp;9103
<td bgcolor=9A8777 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Runelord Brass''<br>&emsp;Citadel<br>&emsp;9104
<td bgcolor=FFFFFF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Praxeti White''<br>&emsp;Citadel<br>&emsp;9117
<td bgcolor=FFF200 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Hexos Palesun''<br>&emsp;Citadel<br>&emsp;9118
<td bgcolor=F79E86 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Kindleflame''<br>&emsp;Citadel<br>&emsp;9119
<td bgcolor=B69FCC style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lucius Lilac''<br>&emsp;Citadel<br>&emsp;9120
<td bgcolor=A2BAD2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Etherium Blue''<br>&emsp;Citadel<br>&emsp;9121
<td bgcolor=58C1CD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Skink Blue''<br>&emsp;Citadel<br>&emsp;9122
<td bgcolor=84C3AA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Hellion Green''<br>&emsp;Citadel<br>&emsp;9123
<td bgcolor=C0BD81 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Underhive Ash''<br>&emsp;Citadel<br>&emsp;9124
<td bgcolor=ECC083 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Eldar Flesh''<br>&emsp;Citadel<br>&emsp;9125
<td bgcolor=CDC586 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tyrant Skull''<br>&emsp;Citadel<br>&emsp;9126
<td bgcolor=BDB192 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Terminatus Stone''<br>&emsp;Citadel<br>&emsp;9127
<td bgcolor=CECEAF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Longbeard Grey''<br>&emsp;Citadel<br>&emsp;9128
<td bgcolor=F4AFCD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Changeling Pink''<br>&emsp;Citadel<br>&emsp;9129
<td bgcolor=727D81 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Necron Compound''<br>&emsp;Citadel<br>&emsp;9130
<td bgcolor=A88F57 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Golden Griffon''<br>&emsp;Citadel<br>&emsp;9131
<td bgcolor=EC631A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ryza Rust''<br>&emsp;Citadel<br>&emsp;9132
<td bgcolor=979DA1 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lahmian Medium''<br>&emsp;Citadel<br>&emsp;9143
<td bgcolor=979DA1 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ard Coat''<br>&emsp;Citadel<br>&emsp;9144
<td bgcolor=231F20 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Imperial Primer''<br>&emsp;Citadel<br>&emsp;9145
<td bgcolor=9A816B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Agrellan Earth''<br>&emsp;Citadel<br>&emsp;9147
<td bgcolor=67080B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blood For The Blood God''<br>&emsp;Citadel<br>&emsp;9148
<td bgcolor=6CB79E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nihilakh Oxide''<br>&emsp;Citadel<br>&emsp;9149
<td bgcolor=9B8F22 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nurgle's Rot''<br>&emsp;Citadel<br>&emsp;9150
<td bgcolor=463D2B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Typhus Corrosion''<br>&emsp;Citadel<br>&emsp;9151
<td bgcolor=58C1CD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Baharroth Blue''<br>&emsp;Citadel<br>&emsp;9152
<td bgcolor=A2BAD2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue Horror''<br>&emsp;Citadel<br>&emsp;9153
<td bgcolor=B69FCC style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dechala Lilac''<br>&emsp;Citadel<br>&emsp;9154
<td bgcolor=FFF200 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dorn Yellow''<br>&emsp;Citadel<br>&emsp;9155
<td bgcolor=ECC083 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flayed One Flesh''<br>&emsp;Citadel<br>&emsp;9156
<td bgcolor=F4AFCD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Fulgrim Pink''<br>&emsp;Citadel<br>&emsp;9157
<td bgcolor=84C3AA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gauss Blaster Green''<br>&emsp;Citadel<br>&emsp;9158
<td bgcolor=C0BD81 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Krieg Khaki''<br>&emsp;Citadel<br>&emsp;9159
<td bgcolor=F79E86 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lugganath Orange''<br>&emsp;Citadel<br>&emsp;9160
;Paint Names
<<list-links "[library[Citadel]sort[title]]">>

;Cities
:[[Candor]]
:[[New Amsterdam]]
:[[Alten]]
:[[Solis Lagus]]
:[[Ogygis]]
:[[Logrania]]
:[[Nereidia]]
:[[Pelagus]]
:[[Gaaryan]]
:[[Alkaara Slonn]]
:[[Protei]]
:[[Aurora]]
:[[Erythria]]
:[[Tobansoor]]
:[[Deucalionis]]
:[[Pyrrhae]]
:[[Baetis]]
:[[Eos]]
:[[Hyoraotes]]
:[[Aram]]
:[[Tossia]]
:[[Argus]]
:[[Gaaryan]]
[img[Claymore Castings.image]]

Claymore Castings was formed in 2012 and is run by David Imrie and his wife Arlynne. David has been a figure painter, collector and gamer for a number of years. Our goal is to use our experience to sell top quality wargames figures that are beautifully sculpted and well researched. We hope that you have as much enjoyment collecting and gaming with the figures as we have had creating them.

Claymore Castings is a hobby run business and we develop the ranges when time permits.

[img[Claymore Castings.image.01]]
;Website example
:https://www.reddit.com/r/firefox/comments/7e6juk/can_reader_mode_be_styled_using_usercontentcss/
;URL Prefix
:about:reader?url=
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Tabletop Games:Cold War Commander]]
<<multilevel-toc-expandable tag:"Tabletop Games:Cold War Commander" stateTiddler:"state_Tabletop Games:Cold War Commander">>


Colonel Ian O’Reilly, A.R.I.
Strength: 5 
Intellect: 6 
Agility: 6 
Charisma: 5 
Endurance: 5 
Social Level: 1

Careers: Anarchist, Master Criminal Skills: Fisticuffs 4, Throwing 3, Close Combat 6, Stealth 5, Crime 4 (Forger), Marks-manship 4 (Pistol), Wilderness Travel 4 (Mapping), Observation 6, Engineering 2 (Explosives), Science 2 (Archaeology), Eloquence 5, Theatrics 5, Linguistics 4 (High Martian [Astusapes Dialect], Kohline, German, Open Slot), Leadership 4, Piloting 4 (Aerial Flyer), Medicine 2.


!Background

Ian O’Reilly has been destined from birth to oppose the designs of the British Empire. Seven generations of his family have fought to drive the cursed English from Ireland’s shores, and seven generations have given their lives, butchered by the English government or their Irish lackeys. Ian has been a part of the movement almost since birth — when he was two weeks old his mother hid a pair of pistols in his crib when the police came to call.

Even though his skin was rubbed raw by the guns, he did not cry out, saving his family from the firing squad. His father died in a bomb explosion when Ian was six; his mother was raped and bayoneted by British soldiers in front of his eyes when he was twelve. Sent to an English public school by a British officer who took pity on him, Ian learned to hate his oppressors even more, while learning the skills that would allow him to pass in polite society. After leaving school, he became a solicitor (lawyer) in Dublin, using his contacts to aid the ARI in its work. During those years he arranged for the soldiers who killed his mother to meet horrible and lingering deaths. That mission accomplished, he grew tired of legal work, and planned and executed his spectacular robbery of the Irish Mail train, after which he escaped to Mars.

There, in cooperation with Baron Hasso von Gruber, he has sought to embarrass the British at every turn, working to unite the savage High Martians of the Astusapes highlands for an attack on the Crown Colony of Syrtis Major. His current plan to steal the gold from the Majestic is just the latest in his daring plots to finance his designs.

!Motivations
O’Reilly hates the British Empire and anyone British with a passion. His greatest passion is reserved for active duty British officers and NCOs, who he loves to capture and torture in novel ways. Oddly enough, other British citizens are quite safe in his hands. O’Reilly believes that the Irish race is inherently superior to the English, and so his sense of fair play and courtesy is well developed — he will not be randomly cruel, and will often give those who oppose him a way out (as long as they are not active duty military).

Above all else, O’Reilly seeks the destruction of the British Empire on Mars, a collapse that he sees as only the first step to the destruction of England itself. He will rob, cheat, steal, and ally himself with anyone, no matter how unsavory (even Germans!) if it brings him closer to his goal. A master of disguise, the player characters can never be sure he’s not watching. Play on that fear. O’Reilly’s one weakness is money. His plans call for large amounts of cash, so the chance to obtain it will bring him running.

!ENCOUNTER IDEAS
O’Reilly spends much of his time in the AstusapesHighlands, working to organize the High Martians, so he will most likely be encountered there, especially if he arranges for the players to be captured. He will probably wish to use them in some way to gain funds for his operations, perhaps by holding them hostage. Alternatively, O’Reilly or his minions may have kidnaped someone else, and the players are either friends with the victim or are hired to find out who the kidnaper is.

O’Reilly also is a frequent visitor to Syrtis Major and other cities in the British colony. He has two goals during these visits: obtaining arms and money for his cause, and gathering information about the movements of British troops. He will most likely be found in the Bazaar, looking for weap-ons and supplies. If the characters are looking for guns to arm their new privateer, they may become involved in a bidding war with O’Reilly, earning his enmity. Wealthy characters, on the other hand, may be approached for charitable donations to benefit the widows and orphans of the brave men who fell in the Oenotrian campaign, donations that will actually go to line O’Reilly’s pockets. Military characters will be avidly pumped for information by women of loose virtue, whatever they say going straight to O’Reilly’s ears.

If the characters are not on the right side of the law, and especially if they are Americans, they may be hired by O’Reilly for some task. O’Reilly often buys guns in Thymiamata, and if the characters have a ship they could be hired to deliver a cargo or two for him, with a double-cross waiting if they turn out to be less than honest.

One final note: O’Reilly has connections and agents all over Mars. He has sold guns to the Belgians and to the rebels fighting them, he has travelled in the Tossian Empire, it is even rumored that he has had something to do with the recent troubles on Venus. He operates through his agents and in disguise everywhere. If the players ever cross him they will find no safe hiding place.
!!TiddlyWiki colors
;TiddlyWiki
:orange - rgb(255,165,0)
;;Notebook
::darkorange - rgb(255,140,0)

|  |coral |#FF7F50 |rgb(255,127,80)|
|  |tomato |#FF6347 |rgb(255,99,71)|
|  |orangered |#FF4500 |rgb(255,69,0)|
|  |gold |#FFD700 |rgb(255,215,0)|


!!Hobby colors
;Hobby
:blue - rgb(0,0,255)

|  |powderblue |#B0E0E6 |rgb(176,224,230)|
|  |lightblue |#ADD8E6 |rgb(173,216,230)|
|  |lightskyblue |#87CEFA |rgb(135,206,250)|
|  |skyblue |#87CEEB |rgb(135,206,235)|
|  |deepskyblue |#00BFFF |rgb(0,191,255)|
|  |lightsteelblue |#B0C4DE |rgb(176,196,222)|
|  |dodgerblue |#1E90FF |rgb(30,144,255)|
|  |cornflowerblue |#6495ED |rgb(100,149,237)|
|  |steelblue |#4682B4 |rgb(70,130,180)|
|  |royalblue |#4169E1 |rgb(65,105,225)|
|  |mediumblue |#0000CD |rgb(0,0,205)|
|  |darkblue |#00008B |rgb(0,0,139)|
|  |navy |#000080 |rgb(0,0,128)|
|  |midnightblue |#191970 |rgb(25,25,112)|
|  |mediumslateblue |#7B68EE |rgb(123,104,238)|
|  |slateblue |#6A5ACD |rgb(106,90,205)|
|  |darkslateblue |#483D8B |rgb(72,61,139)|

!!Tabletop Wargame
;Tabletop Wargames
:brown - rgb(165,42,42)
;;Blitzkreig Commander IV
::sandybrown - rgb(244,164,96)
;;Battlefield Gothic
::goldenrod - rgb(218,165,32)


|  |cornsilk |#FFF8DC |rgb(255,248,220)|
|  |blanchedalmond |#FFEBCD |rgb(255,235,205)|
|  |bisque |#FFE4C4 |rgb(255,228,196)|
|  |navajowhite |#FFDEAD |rgb(255,222,173)|
|  |wheat |#F5DEB3 |rgb(245,222,179)|
|  |burlywood |#DEB887 |rgb(222,184,135)|
|  |tan |#D2B48C |rgb(210,180,140)|
|  |rosybrown |#BC8F8F |rgb(188,143,143)|


|  |peru |#CD853F |rgb(205,133,63)|
|  |chocolate |#D2691E |rgb(210,105,30)|
|  |saddlebrown |#8B4513 |rgb(139,69,19)|
|  |sienna |#A0522D |rgb(160,82,45)|

|  |maroon |#800000 |rgb(128,0,0)|

---

!!Red colors
|  |lightsalmon |#FFA07A |rgb(255,160,122)|
|  |salmon |#FA8072 |rgb(250,128,114)|
|  |darksalmon |#E9967A |rgb(233,150,122)|
|  |lightcoral |#F08080 |rgb(240,128,128)|
|  |indianred |#CD5C5C |rgb(205,92,92)|
|  |crimson |#DC143C |rgb(220,20,60)|
|  |firebrick |#B22222 |rgb(178,34,34)|
|  |red |#FF0000 |rgb(255,0,0)|
|  |darkred |#8B0000 |rgb(139,0,0)|



!!Yellow colors
|  |lightyellow |#FFFFE0 |rgb(255,255,224)|
|  |lemonchiffon |#FFFACD |rgb(255,250,205)|
|  |lightgoldenrodyellow |#FAFAD2 |rgb(250,250,210)|
|  |papayawhip |#FFEFD5 |rgb(255,239,213)|
|  |moccasin |#FFE4B5 |rgb(255,228,181)|
|  |peachpuff |#FFDAB9 |rgb(255,218,185)|
|  |palegoldenrod |#EEE8AA |rgb(238,232,170)|
|  |khaki |#F0E68C |rgb(240,230,140)|
|  |darkkhaki |#BDB76B |rgb(189,183,107)|
|  |yellow |#FFFF00 |rgb(255,255,0)|

!!Green colors
|  |lawngreen |#7CFC00 |rgb(124,252,0)|
|  |chartreuse |#7FFF00 |rgb(127,255,0)|
|  |limegreen |#32CD32 |rgb(50,205,50)|
|  |lime |#00FF00 |rgb(0.255.0)|
|  |forestgreen |#228B22 |rgb(34,139,34)|
|  |green |#008000 |rgb(0,128,0)|
|  |darkgreen |#006400 |rgb(0,100,0)|
|  |greenyellow |#ADFF2F |rgb(173,255,47)|
|  |yellowgreen |#9ACD32 |rgb(154,205,50)|
|  |springgreen |#00FF7F |rgb(0,255,127)|
|  |mediumspringgreen |#00FA9A |rgb(0,250,154)|
|  |lightgreen |#90EE90 |rgb(144,238,144)|
|  |palegreen |#98FB98 |rgb(152,251,152)|
|  |darkseagreen |#8FBC8F |rgb(143,188,143)|
|  |mediumseagreen |#3CB371 |rgb(60,179,113)|
|  |seagreen |#2E8B57 |rgb(46,139,87)|
|  |olive |#808000 |rgb(128,128,0)|
|  |darkolivegreen |#556B2F |rgb(85,107,47)|
|  |olivedrab |#6B8E23 |rgb(107,142,35)|

!!Cyan colors
|  |lightcyan |#E0FFFF |rgb(224,255,255)|
|  |cyan |#00FFFF |rgb(0,255,255)|
|  |aqua |#00FFFF |rgb(0,255,255)|
|  |aquamarine |#7FFFD4 |rgb(127,255,212)|
|  |mediumaquamarine |#66CDAA |rgb(102,205,170)|
|  |paleturquoise |#AFEEEE |rgb(175,238,238)|
|  |turquoise |#40E0D0 |rgb(64,224,208)|
|  |mediumturquoise |#48D1CC |rgb(72,209,204)|
|  |darkturquoise |#00CED1 |rgb(0,206,209)|
|  |lightseagreen |#20B2AA |rgb(32,178,170)|
|  |cadetblue |#5F9EA0 |rgb(95,158,160)|
|  |darkcyan |#008B8B |rgb(0,139,139)|
|  |teal |#008080 |rgb(0,128,128)|

!!Purple colors
|  |lavender |#E6E6FA |rgb(230,230,250)|
|  |thistle |#D8BFD8 |rgb(216,191,216)|
|  |plum |#DDA0DD |rgb(221,160,221)|
|  |violet |#EE82EE |rgb(238,130,238)|
|  |orchid |#DA70D6 |rgb(218,112,214)|
|  |fuchsia |#FF00FF |rgb(255,0,255)|
|  |magenta |#FF00FF |rgb(255,0,255)|
|  |mediumorchid |#BA55D3 |rgb(186,85,211)|
|  |mediumpurple |#9370DB |rgb(147,112,219)|
|  |blueviolet |#8A2BE2 |rgb(138,43,226)|
|  |darkviolet |#9400D3 |rgb(148,0,211)|
|  |darkorchid |#9932CC |rgb(153,50,204)|
|  |darkmagenta |#8B008B |rgb(139,0,139)|
|  |purple |#800080 |rgb(128,0,128)|
|  |indigo |#4B0082 |rgb(75,0,130)|

!!Pink colors
|  |pink |#FFC0CB |rgb(255,192,203)|
|  |lightpink |#FFB6C1 |rgb(255,182,193)|
|  |hotpink |#FF69B4 |rgb(255,105,180)|
|  |deeppink |#FF1493 |rgb(255,20,147)|
|  |palevioletred |#DB7093 |rgb(219,112,147)|
|  |mediumvioletred |#C71585 |rgb(199,21,133)|

!!White colors
|  |white |#FFFFFF |rgb(255,255,255)|
|  |snow |#FFFAFA |rgb(255,250,250)|
|  |honeydew |#F0FFF0 |rgb(240,255,240)|
|  |mintcream |#F5FFFA |rgb(245,255,250)|
|  |azure |#F0FFFF |rgb(240,255,255)|
|  |aliceblue |#F0F8FF |rgb(240,248,255)|
|  |ghostwhite |#F8F8FF |rgb(248,248,255)|
|  |whitesmoke |#F5F5F5 |rgb(245,245,245)|
|  |seashell |#FFF5EE |rgb(255,245,238)|
|  |beige |#F5F5DC |rgb(245,245,220)|
|  |oldlace |#FDF5E6 |rgb(253,245,230)|
|  |floralwhite |#FFFAF0 |rgb(255,250,240)|
|  |ivory |#FFFFF0 |rgb(255,255,240)|
|  |antiquewhite |#FAEBD7 |rgb(250,235,215)|
|  |linen |#FAF0E6 |rgb(250,240,230)|
|  |lavenderblush |#FFF0F5 |rgb(255,240,245)|
|  |mistyrose |#FFE4E1 |rgb(255,228,225)|

!!Gray colors
|  |gainsboro |#DCDCDC |rgb(220,220,220)|
|  |lightgray |#D3D3D3 |rgb(211,211,211)|
|  |silver |#C0C0C0 |rgb(192,192,192)|
|  |darkgray |#A9A9A9 |rgb(169,169,169)|
|  |gray |#808080 |rgb(128,128,128)|
|  |dimgray |#696969 |rgb(105,105,105)|
|  |lightslategray |#778899 |rgb(119,136,153)|
|  |slategray |#708090 |rgb(112,128,144)|
|  |darkslategray |#2F4F4F |rgb(47,79,79)|
|  |black |#000000 |rgb(0,0,0)|
!![img[Recon Armored Company.British]] [[Company A/1st East Riding Yeomanry]]

<<<
;Headquarters
://[[Vickers Mk VI B]]//
:3x [[Vickers Mk VI B]]
*A intelligent constable with a hatred for lords and high society.
*near perfect memory
*wants to advance in society and dresses so.
; Sources
: https://www.brettshavers.com/brett-s-blog/entry/brett-s-notes-on-note-taking
: https://www.forensicnotes.com/digital-forensics-documentation-contemporaneous-notes-required
: https://bitofhex.com/2018/08/02/contemporaneous-notes/


; Discussion Topics
: https://www.forensicfocus.com/forums/general/examination-notes-case-notes-contemporaneous-notes/
: https://trewmte.blogspot.com/2017/07/whats-happening-with-contemporaneous.html


; Software Demonstrations (Examples)
: https://www.dfir.training/dfir-training-blog/no-job-is-finished-until-the-paperwork-is-done


; White Papers
: https://www.sans.org/reading-room/whitepapers/forensics/contemporaneous-notes-requirement-security-professionals-39185
|{{Wargames Foundry 001A}} |{{Contrast:Name}} |
|{{Wargames Foundry 002A}} |{{Contrast:Name}} |
|{{Wargames Foundry 003A}} |{{Contrast:Name}} |
|{{Wargames Foundry 004A}} |{{Contrast:Name}} |
|{{Wargames Foundry 005A}} |{{Contrast:Snakebite Leather}} |
|{{Wargames Foundry 006A}} |{{Contrast:Name}} |
|{{Wargames Foundry 007A}} |{{Contrast:Name}} |
|{{Wargames Foundry 008A}} |{{Contrast:Name}} |
|{{Wargames Foundry 009A}} |{{Contrast:Name}} |
|{{Wargames Foundry 010A}} |{{Contrast:Name}} |
|{{Wargames Foundry 011A}} |{{Contrast:Name}} |
|{{Wargames Foundry 012A}} |{{Contrast:Name}} |
|{{Wargames Foundry 013A}} |{{Contrast:Snakebite Leather}} |
|{{Wargames Foundry 014A}} |{{Contrast:Name}} |
|{{Wargames Foundry 015A}} |{{Contrast:Name}} |
|{{Wargames Foundry 016A}} |{{Contrast:Name}} |
|{{Wargames Foundry 017A}} |{{Contrast:Name}} |
|{{Wargames Foundry 018A}} |{{Contrast:Name}} |
|{{Wargames Foundry 019A}} |{{Contrast:Name}} |
|{{Wargames Foundry 020A}} |{{Contrast:Name}} |
|{{Wargames Foundry 021A}} |{{Contrast:Name}} |
|{{Wargames Foundry 022A}} |{{Contrast:Name}} |
|{{Wargames Foundry 023A}} |{{Contrast:Name}} |
|{{Wargames Foundry 024A}} |{{Contrast:Name}} |
|{{Wargames Foundry 025A}} |{{Contrast:Name}} |
|{{Wargames Foundry 026A}} |{{Contrast:Name}} |
|{{Wargames Foundry 027A}} |{{Contrast:Name}} |
|{{Wargames Foundry 028A}} |{{Contrast:Name}} |
|{{Wargames Foundry 029A}} |{{Contrast:Name}} |
|{{Wargames Foundry 030A}} |{{Contrast:Name}} |
|{{Wargames Foundry 031A}} |{{Contrast:Name}} |
|{{Wargames Foundry 032A}} |{{Contrast:Name}} |
|{{Wargames Foundry 033A}} |{{Contrast:Name}} |
|{{Wargames Foundry 034A}} |{{Contrast:Name}} |
|{{Wargames Foundry 035A}} |{{Contrast:Black Templar}} |
|{{Wargames Foundry 036A}} |{{Contrast:Name}} |
|{{Wargames Foundry 037A}} |{{Contrast:Name}} |
|{{Wargames Foundry 038A}} |{{Contrast:Blood Angels Red}} |
|{{Wargames Foundry 039A}} |{{Contrast:Name}} |
|{{Wargames Foundry 040A}} |{{Contrast:Name}} |
|{{Wargames Foundry 041A}} |{{Contrast:Name}} |
|{{Wargames Foundry 042A}} |{{Contrast:Name}} |
|{{Wargames Foundry 043A}} |{{Contrast:Name}} |
|{{Wargames Foundry 044A}} |{{Contrast:Name}} |
|{{Wargames Foundry 045A}} |{{Contrast:Name}} |
|{{Wargames Foundry 046A}} |{{Contrast:Name}} |
|{{Wargames Foundry 053A}} |{{Contrast:Name}} |
|{{Wargames Foundry 054A}} |{{Contrast:Name}} |
|{{Wargames Foundry 055A}} |{{Contrast:Name}} |
|{{Wargames Foundry 056A}} |{{Contrast:Name}} |
|{{Wargames Foundry 057A}} |{{Contrast:Name}} |
|{{Wargames Foundry 058A}} |{{Contrast:Name}} |
|{{Wargames Foundry 060A}} |{{Contrast:Name}} |
|{{Wargames Foundry 061A}} |{{Contrast:Name}} |
|{{Wargames Foundry 062A}} |{{Contrast:Name}} |
|{{Wargames Foundry 063A}} |{{Contrast:Name}} |
|{{Wargames Foundry 064A}} |{{Contrast:Name}} |
|{{Wargames Foundry 065A}} |{{Contrast:Name}} |
|{{Wargames Foundry 066A}} |{{Contrast:Name}} |
|{{Wargames Foundry 067A}} |{{Contrast:Name}} |
|{{Wargames Foundry 068A}} |{{Contrast:Blood Angles Red}} |
|{{Wargames Foundry 069A}} |{{Contrast:Name}} |
|{{Wargames Foundry 070A}} |{{Contrast:Name}} |
|{{Wargames Foundry 071A}} |{{Contrast:Name}} |
|{{Wargames Foundry 072A}} |{{Contrast:Name}} |
|{{Wargames Foundry 073A}} |{{Contrast:Name}} |
|{{Wargames Foundry 074A}} |{{Contrast:Name}} |
|{{Wargames Foundry 075A}} |{{Contrast:Name}} |
|{{Wargames Foundry 076A}} |{{Contrast:Name}} |
|{{Wargames Foundry 077A}} |{{Contrast:Name}} |
|{{Wargames Foundry 078A}} |{{Contrast:Name}} |
|{{Wargames Foundry 079A}} |{{Contrast:Name}} |
|{{Wargames Foundry 080A}} |{{Contrast:Name}} |
|{{Wargames Foundry 081A}} |{{Contrast:Name}} |
|{{Wargames Foundry 082A}} |{{Contrast:Name}} |
|{{Wargames Foundry 083A}} |{{Contrast:Name}} |
|{{Wargames Foundry 084A}} |{{Contrast:Name}} |
|{{Wargames Foundry 085A}} |{{Contrast:Name}} |
|{{Wargames Foundry 086A}} |{{Contrast:Name}} |
|{{Wargames Foundry 087A}} |{{Contrast:Name}} |
|{{Wargames Foundry 088A}} |{{Contrast:Name}} |
|{{Wargames Foundry 089A}} |{{Contrast:Name}} |
|{{Wargames Foundry 090A}} |{{Contrast:Name}} |
|{{Wargames Foundry 091A}} |{{Contrast:Name}} |
|{{Wargames Foundry 092A}} |{{Contrast:Name}} |
|{{Wargames Foundry 093A}} |{{Contrast:Name}} |
|{{Wargames Foundry 094A}} |{{Contrast:Name}} |
|{{Wargames Foundry 095A}} |{{Contrast:Name}} |
|{{Wargames Foundry 096A}} |{{Contrast:Name}} |
|{{Wargames Foundry 097A}} |{{Contrast:Name}} |
|{{Wargames Foundry 098A}} |{{Contrast:Name}} |
|{{Wargames Foundry 099A}} |{{Contrast:Name}} |
|{{Wargames Foundry 100A}} |{{Contrast:Name}} |
|{{Wargames Foundry 101A}} |{{Contrast:Name}} |
|{{Wargames Foundry 102A}} |{{Contrast:Name}} |
|{{Wargames Foundry 103A}} |{{Contrast:Name}} |
|{{Wargames Foundry 104A}} |{{Contrast:Name}} |
|{{Wargames Foundry 105A}} |{{Contrast:Name}} |
|{{Wargames Foundry 106A}} |{{Contrast:Name}} |
|{{Wargames Foundry 107A}} |{{Contrast:Name}} |
|{{Wargames Foundry 108A}} |{{Contrast:Name}} |
|{{Wargames Foundry 109A}} |{{Contrast:Name}} |
|{{Wargames Foundry 110A}} |{{Contrast:Name}} |
|{{Wargames Foundry 111A}} |{{Contrast:Name}} |
|{{Wargames Foundry 112A}} |{{Contrast:Name}} |
|{{Wargames Foundry 115A}} |{{Contrast:Name}} |
|{{Wargames Foundry 116A}} |{{Contrast:Name}} |
|{{Wargames Foundry 117A}} |{{Contrast:Name}} |
|{{Wargames Foundry 118A}} |{{Contrast:Name}} |
|{{Wargames Foundry 119A}} |{{Contrast:Name}} |
|{{Wargames Foundry 120A}} |{{Contrast:Name}} |
|{{Wargames Foundry 121A}} |{{Contrast:Name}} |
|{{Wargames Foundry 122A}} |{{Contrast:Name}} |
|{{Wargames Foundry 123A}} |{{Contrast:Name}} |
|{{Wargames Foundry 124A}} |{{Contrast:Name}} |
|{{Wargames Foundry 125A}} |{{Contrast:Name}} |
|{{Wargames Foundry 126A}} |{{Contrast:Name}} |
|{{Wargames Foundry 127A}} |{{Contrast:Name}} |

---

|{{Wargames Foundry 001B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 001C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 002B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 002C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 003B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 003C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 004B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 004C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 005B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 005C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 006B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 006C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 007B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 007C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 008B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 008C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 009B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 009C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 010B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 010C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 011B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 011C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 012B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 012C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 013B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 013C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 014B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 014C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 015B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 015C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 016B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 016C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 017B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 017C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 018B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 018C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 019B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 019C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 020B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 020C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 021B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 021C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 022B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 022C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 023B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 023C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 024B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 024C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 025B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 025C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 026B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 026C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 027B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 027C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 028B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 028C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 029B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 029C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 030B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 030C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 031B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 031C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 032B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 032C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 033B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 033C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 034B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 034C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 035B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 035C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 036B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 036C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 037B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 037C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 038B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 038C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 039B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 039C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 040B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 040C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 041B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 041C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 042B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 042C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 043B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 043C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 044B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 044C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 045B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 045C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 046B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 046C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 053B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 053C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 054B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 054C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 055B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 055C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 056B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 056C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 057B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 057C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 058B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 058C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 060B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 060C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 061B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 061C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 062B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 062C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 063B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 063C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 064B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 064C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 065B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 065C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 066B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 066C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 067B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 067C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 068B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 068C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 069B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 069C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 070B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 070C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 071B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 071C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 072B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 072C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 073B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 073C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 074B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 074C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 075B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 075C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 076B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 076C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 077B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 077C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 078B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 078C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 079B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 079C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 080B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 080C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 081B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 081C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 082B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 082C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 083B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 083C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 084B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 084C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 085B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 085C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 086B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 086C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 087B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 087C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 088B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 088C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 089B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 089C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 090B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 090C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 091B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 091C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 092B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 092C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 093B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 093C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 094B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 094C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 095B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 095C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 096B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 096C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 097B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 097C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 098B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 098C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 099B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 099C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 100B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 100C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 101B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 101C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 102B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 102C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 103B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 103C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 104B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 104C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 105B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 105C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 106B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 106C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 107B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 107C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 108B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 108C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 109B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 109C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 110B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 110C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 111B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 111C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 112B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 112C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 115B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 115C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 116B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 116C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 117B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 117C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 118B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 118C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 119B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 119C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 120B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 120C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 121B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 121C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 122B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 122C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 123B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 123C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 124B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 124C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 125B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 125C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 126B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 126C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 127B}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 127C}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 127D}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 127E}} |{{Vallejo 70.000}} |
|{{Wargames Foundry 127F}} |{{Vallejo 70.000}} |
Snakebite Leather
!! Skills for Main Ship Fittings

```
Light Drone Operation I
Repair Systems I
Shield Operation I
Leadership I
Mining Drone Operation I
Shield Emission Systems I
Caldari Frigate I
Energy Pulse Weapons I
Mining Foreman I
Shield Command I
Armor Layering I
ORE Industrial I
Mining Upgrades I
Missile Launcher Operation II
Drones II
Industry II
Drone Avionics II
Light Drone Operation II
Repair Systems II
Remote Armor Repair Systems I
Shield Operation II
Leadership II
Cloaking I
Energy Grid Upgrades II
Shield Upgrades II
Electronic Warfare II
Mining Drone Operation II
Caldari Frigate II
Energy Pulse Weapons II
Remote Armor Repair Systems II
Shield Emission Systems II
Mining Foreman II
Shield Command II
Shield Management II
Armor Layering II
Tactical Shield Manipulation II
ORE Industrial II
Mining Upgrades II
Warp Drive Operation III
Missile Launcher Operation III
Drones III
Medium Drone Operation I
Medium Drone Operation II
Industry III
Mass Production I
Mass Production II
Drone Avionics III
Light Drone Operation III
Shield Operation III
Leadership III
Cloaking II
Weapon Upgrades III
Energy Grid Upgrades III
Shield Upgrades III
Electronic Warfare III
Mining Drone Operation III
Caldari Frigate III
Caldari Destroyer I
Caldari Destroyer II
Caldari Destroyer III
Caldari Cruiser I
Caldari Cruiser II
Energy Pulse Weapons III
Remote Armor Repair Systems III
Mass Production III
Medium Drone Operation III
Shield Emission Systems III
Mining Foreman III
Shield Command III
Shield Management III
Armor Layering III
Tactical Shield Manipulation III
ORE Industrial III
Mining Upgrades III
Spaceship Command IV
Mining IV
Navigation IV
Micro Jump Drive Operation I
Capacitor Systems Operation IV
Caldari Cruiser III
Caldari Battlecruiser I
Caldari Battlecruiser II
Warp Drive Operation IV
Missile Launcher Operation IV
Warhead Upgrades I
Warhead Upgrades II
Warhead Upgrades III
Drones IV
Salvage Drone Operation I
Light Drone Operation IV
Shield Operation IV
Leadership IV
Cloaking III
Caldari Battlecruiser III
Caldari Battleship I
Hull Upgrades IV
Electronics Upgrades IV
Weapon Upgrades IV
Advanced Weapon Upgrades I
Advanced Weapon Upgrades II
Advanced Weapon Upgrades III
Energy Grid Upgrades IV
Shield Upgrades IV
Electronic Warfare IV
Mining Drone Operation IV
Energy Pulse Weapons IV
Mass Production IV
Medium Drone Operation IV
Shield Emission Systems IV
Mining Foreman IV
Shield Command IV
Shield Management IV
Armor Layering IV
Tactical Shield Manipulation IV
Mining Upgrades IV
Science V
Power Grid Management V
Warhead Upgrades IV
Spaceship Command V
Advanced Spaceship Command I
Advanced Spaceship Command II
Advanced Spaceship Command III
Advanced Spaceship Command IV
Navigation V
Warp Drive Operation V
Jump Drive Operation I
Drones V
Drone Sharpshooting I
Drone Interfacing I
Gallente Drone Specialization I
Amarr Drone Specialization I
Heavy Drone Operation I
Drone Sharpshooting II
Drone Interfacing II
Drone Sharpshooting III
Drone Interfacing III
Drone Sharpshooting IV
Drone Interfacing IV
Sentry Drone Interfacing I
Sentry Drone Interfacing II
Sentry Drone Interfacing III
Sentry Drone Interfacing IV
Light Drone Operation V
Shield Operation V
Leadership V
Advanced Weapon Upgrades IV
Hull Upgrades V
Electronics Upgrades V
Weapon Upgrades V
Energy Grid Upgrades V
Shield Upgrades V
Mining Drone Operation V
Mining Drone Specialization I
Energy Pulse Weapons V
Mass Production V
Advanced Mass Production I
Advanced Mass Production II
Advanced Mass Production III
Advanced Mass Production IV
Industrial Reconfiguration I
Industrial Reconfiguration II
Industrial Reconfiguration III
Industrial Reconfiguration IV
Medium Drone Operation V
Shield Emission Systems V
Capital Shield Emission Systems I
Capital Shield Emission Systems II
Capital Shield Emission Systems III
Mining Foreman V
Mining Director I
Industrial Command Ships I
Industrial Command Ships II
Industrial Command Ships III
Jury Rigging I
Jury Rigging II
Jury Rigging III
Armor Rigging I
Astronautics Rigging I
Drones Rigging I
Electronic Superiority Rigging I
Energy Weapon Rigging I
Hybrid Weapon Rigging I
Launcher Rigging I
Projectile Weapon Rigging I
Shield Rigging I
Armor Rigging II
Astronautics Rigging II
Drones Rigging II
Electronic Superiority Rigging II
Energy Weapon Rigging II
Hybrid Weapon Rigging II
Launcher Rigging II
Projectile Weapon Rigging II
Shield Rigging II
Armor Rigging III
Astronautics Rigging III
Drones Rigging III
Electronic Superiority Rigging III
Energy Weapon Rigging III
Hybrid Weapon Rigging III
Launcher Rigging III
Projectile Weapon Rigging III
Shield Rigging III
Jury Rigging IV
Armor Rigging IV
Astronautics Rigging IV
Drones Rigging IV
Electronic Superiority Rigging IV
Energy Weapon Rigging IV
Hybrid Weapon Rigging IV
Launcher Rigging IV
Projectile Weapon Rigging IV
Shield Rigging IV
Jury Rigging V
Armor Rigging V
Astronautics Rigging V
Drones Rigging V
Electronic Superiority Rigging V
Energy Weapon Rigging V
Hybrid Weapon Rigging V
Launcher Rigging V
Projectile Weapon Rigging V
Shield Rigging V
Shield Command V
Shield Command Specialist I
Shield Management V
Capital Shield Operation I
Armor Layering V
Tactical Shield Manipulation V
Invulnerability Core Operation I
Mining Upgrades V
Sentry Drone Interfacing V
Advanced Spaceship Command V
Capital Ships I
Capital Ships II
Capital Industrial Ships I
Warhead Upgrades V
Advanced Weapon Upgrades V
Industrial Reconfiguration V
```
[img[Dark Eldar Corsair Class Escort.image]]
!Fleet Commander
;0-1 Dread Archon

You may include 1 Dread Archon in your fleet, who must be assigned to a ship and adds +2 to its Leadership, to a maximum of 10. If the fleet is worth over 750 points, a Dread Archon must be included to lead it.

|Dread Archon (Ld +2) | 100	pts |

You may purchase Fleet Commander re-rolls for your Dread Archon by paying the cost listed below:

|One re-roll | 25	pts |
|Two re-rolls | 50	pts |
|Three re-rolls | 100	pts |

!Capital Ships
!!Torture Class Cruisers

;0-12 Cruisers

|[[Dark Eldar Torture Class Cruiser]] | 210 pts |

Torture Class Cruisers may choose one of the following for the points shown:

|Prow Torpedoes  | +20	pts |
|Phantom Lance | +20	pts |
|Impaler Assault Module  | +20	pts |
|Launch Bays | +40	pts |

Torture Class Cruisers may add Mimic Engines:

|Mimic Engines  | +40	pts |

!Escorts

Your fleet may have any number of Escorts. However, Dark Eldar fleets must contain of at least three Escorts for every capital ship taken. 

|[[Dark Eldar Corsair Class Escort]]  | 50 pts |

Corsair class Escorts may add Mimic Engines:

|Mimic Engines  | +20 pts |

!Ordnance

Ships with launch bays may launch any mix of Raptor fighters, Razorwing bombers and Slavebringer assault boats.

Raptor fighters have a speed of 30cm. and need a 4+ to remain in play after removing Ordnance as with Eldar fighters. Razorwing bombers have a speed of 20cm and are hit by turrets only on a D6 roll of 6. Slavebringer assault boats have a speed of 30cm. and are hit by turrets only on a D6 roll of 6.

Ships with torpedo tubes are armed with both Eldar torpedoes and Leech torpedoes, though the Leech torpedoes must be loaded with a separate reload Ordnance roll as described in the special rules.

Impalers, although a form of Ordnance are not counted alongside other Ordnance for purposes of launch limits, running out of Ordnance and so on. In these respects Impalers follow their own special rules.
Many painters have a standard "go-to" wash that they treat all their minis with before painting, in order to make the details "pop" a bit, which makes picking them out easier during painting. One that I've tried and had good luck with is from this article by Ron Vutpakdi. To make this wash, you'll need:

-Matte medium;
-Distilled water;
-and your choice of pigment.

A few notes:

-Use distilled water when mixing your washes. You could have all kinds of funky chemicals and/or mineral deposits in your tap water - a gallon of distilled water costs one measly dollar at the grocery store, and will last you forever.

-You want the standard liquid matte medium - not the "gel" version. This should be available at art supply houses or craft stores. I bought mine at Michael's. It's kind of pricey ($20 for a sixteen-ounce bottle), but if you sign up for Michael's email newsletter, they'll email you a 40% off coupon. You can also buy an eight-ounce bottle for half the price, if you're so inclined.

To make this wash, the recipe is:

-1 part paint (I used Citadel Chaos Black);
-3-4 parts matte medium;
-and 3-4 parts water.

I used disposable pipettes with graduated marking on the side to measure the ingredients. (I get mine from eBay). For this recipe, I used an empty 1oz. bottle from Reaper (available on their website - $3 for a three-pack):

To use this wash, just brush it liberally on a white-primed model. Here's a shot of a Space Marine Librarian with only a primer coat:

[img[Darklining Wash.image.01]]

...and here's the same model after the wash:

[img[Darklining Wash.image.02]]

...you can see how it makes the details much more apparent, and it also gives you the advantage of "pre-shading" the crevices - this prevents the "dirty" look that can happen if you get too enthusiastic while washing an already-basecoated model.
{{||tpl_ShipBlank}}
Deep Space Transport

Deep Space Transports (DSTs) are tech 2 industrial ships with larger cargo capacities than their tech 1 equivalents and fleet hangars that hold 50,000m³ (increased by skills). They have bonuses to active tanking, either shield resistances or armor resistances, helping them to fit substantial buffer tanks. Finally, they get a unique role bonus of 100% to overheating benefits of Afterburners, Microwarpdrives, Local Repair Modules, and Resistance Modules.

They also have a role bonus of +2 warp strength: this means they can't be tackled by just one warp disruptor or non-faction warp scrambler, though they can still be caught by bubbles, gangs of tacklers or HICs.

Where blockade runners are meant to rely on speed and stealth to slip by the enemy, deep space transports are designed to bust their way through the enemy, relying on their warp strength and tanking abilities to escape. This probably won't work against a determined and well-prepared gatecamp, and using a deep space transport indicates to all and sundry that you have cargo you want to protect, so you should think carefully before deploying one. 


;Use with MWD for maintaining stand off distance.
```
[Dominix, MSHL L..A. Berthier]
Multispectrum Coating II
Damage Control II
Drone Damage Amplifier II
Drone Damage Amplifier II
Drone Damage Amplifier II
Large Armor Repairer I
Reactive Armor Hardener

Cap Recharger II
Large Micro Jump Drive
Omnidirectional Tracking Link I
Omnidirectional Tracking Link I
Sensor Booster II

Drone Link Augmentor I
Drone Link Augmentor I
Drone Link Augmentor I
Drone Link Augmentor I
Drone Link Augmentor I
Large Remote Armor Repairer I

Large Capacitor Control Circuit I
Large Capacitor Control Circuit I
Large Capacitor Control Circuit I



Hobgoblin II x1
Garde I x5
Salvage Drone I x5
Caldari Navy Warden x5

Targeting Range Script x1
Tracking Speed Script x2

```
!1. BASIC CONCEPTS

It is the year 3776 AD



although in the sector of the galaxy that concerns us the passage of time is no longer measured as we are used to; 499 PS (Pax Stellaris) would be more accurate.

The Stellar Empire's oppression has been endured for centuries by members of different races on dozens of planets. But now a band of intrepid heroes has sparked a rebellion against the despicable Empire. Although this war is contested not only by humans, but also by beings alien to Earth, and although it sheer magnitude dwarfs the greatest wars of old Earth's history, the struggle involves a principle that we cherish



the right to control our own destiny. 

!!1.1 INTRODUCTION

''a. Game description: ''

Down With the Empire (DWTE) is primarily a two player game, although it is possible to have more than one player per side by dividing forces or tasks. The game can also be played solitaire (see 1.4). There are two major factions in the game, each controlled by a player. The Stellar Empire owns everything at start, and strives to maintain the status quo through its military might. The Rebel Concordance player owns nothing but a few characters and spaceships at start, but by causing unrest and rebellion throughout the Empire, he hopes to get resources that will allow him eventually to meet the Empire on equal terms. 

The game is played in a number of repeating sequences called game turns.

In each game turn, the Rebel player, and then the Imperial player, move their playing pieces and have them carry out certain functions to further their causes.

!!1.2 GLOSSARY OF ABBREVIATIONS AND GAME TERMS

''Abd (Abduction): ''

A mission type.

''Asn (Assassination): ''

A mission type.

''Active: ''

A unit in combat that is placed in the front line to fight normally.

''AGI (Agility):''

A character attribute. A measure of its nimbleness and speed.

''Attacker: ''

The player/force which has caused a given battle by his/its actions. Throughout the rules, sometimes the defender's units are said to attack or make attacks, but this should not be confused with "being the attacker".

''Avoidance Factor: ''

The number which characters with high AGI must roll equal to or less with a d6 in order to avoid a blow in combat.

''Blockade: ''

The action and effect of starships surrounding a planet to cut it off from the rest of the Empire, and impeding enemy movement into and out of it. 

''CAP (Capacity): ''

A character spaceship attribute, how many passengers it can carry.

''Capital Starships: ''

Major warships, including the Moloch, battlestars, star cruisers and heavy cruisers. Because of their mass and structure capital ships can only be built and maintained in space. They cannot land on a planet but must always remain in the orbit box.

''CdE (Coup d'Etat): ''

A mission type.

''Character: ''

An individual controlled by a player and used to perform missions. Characters may be main or minor, and organic or mechanic.

''ChS (Character Spaceship): ''

A unit representing a means of transport used by characters, which must not be confused with military spaceships, usually referred to as "starships". 

''CHA (Charisma):''

A character attribute.

A measure of good looks, manners, and convincing power.

''CMP (Computer): ''

Computer (astronavigation), a character spaceship attribute.

''COM (Command): ''

A character attribute.

A quantification of a character's ability when leading military units. 

''Commander: ''

A character that has been named by a player to lead military units involved in combat.

''Companion: ''

A robot or intelligent animal that may be owned by a main character. Although companions are, generally speaking, items, they have some characteristics that make them minor characters (such as occupying a seat in a spaceship).

''Counter: ''

Cardboard counters are used as pieces in the game. Some are considered units and others simply markers.

''COU (Courage): ''

A character attribute. A measure of the character's "guts" to face extraordinary danger.

''CRT: ''

An abbreviation for "Combat Results Table". 

''CSP (Combat Space Patrol): ''

A value that each starship has, indicating how many starfighters it carries. Each CSP factor represents about two starfighters.

''Defender: ''

The player/force that did not initiate a given battle.

''Detection: ''

A state in which characters are known to be in the area, but not exactly where (a search is needed to actually find them). Detection usually occurs during the tracking routine, but other events may cause it as well.

''Drm (die {dice} roll modifier): ''

A specific quantity that is added to or subtracted from the result generated by a die or dice roll. After the modification is made, the final result is what applies.

''Disengagement: ''

An attempt by a player's units to escape from the current battle situation.

''Dogfight:''

A type of combat involving fighters and character spaceships.

''Elite: ''

A military unit with the best training and provided with the latest in weaponry and equipment. Imperial elite units are noted by a slightly darker color background on their counters.

''END (Endurance): ''

A measure of the punishment a unit can take before being destroyed, reflecting both its toughness and its ability to avoid blows. Also a character attribute.

''Environmental Type: ''

The main type of "terrain" that exists on a planet. A planet might have other types, of course, but one is predominant and affects operations there. All the terrain types except City, Natural and Station are considered "peculiar", giving advantages to Rebel troops raised there, and disadvantages to Imperial regular troops.

//''City''//</span>

represents a planet that is heavily populated and has an important number of urban complexes, which are the center of civilized activity. Even present-day Earth would qualify as a "City" predominant environment. ID color: Blue-gray.

//''Natural''//</span>
is a terran type of planet that is either sparsely populated and not very developed, or one in which the population has chosen to live dispersed and in harmony with the ecosystem. Units operating in natural environments must face the peculiarities of terrain such as jungle, forest, desert, plains or tundra. ID color: Green.

//''Underground''//</span>

is

a planet where most of the populated habitat is subterranean, in caves and tunnels created naturally or by excavation. ID color: Red.

//''Sea''//</span>

is a planet where the predominant environment is an ocean of liquid, usually water, with people living on the surface or on the bottom of the sea. ID color: Blue.

//''Atmospheric''//</span>

is a planet where people live and work in the atmosphere; sometimes, but not always, it is because the surface is not suitable. The planet is populated either by creatures that fly, or by people in floating habitats. ID color: Light blue.

//''Heat''//</span>

a planet which although not strictly in flames, is too hot for permanent (or at least reasonably comfortable) habitation by humans and most other beings, but well suited to some adapted species.  ID color: Yellow.

//''Ice''//</span>

is of course, a frozen or very cold planet. ID color: White.

//''Noxious''//</span>
is a planet where the conditions are most unfriendly for humanoid habitation, due to factors such as a poisonous atmosphere or excessive amounts of radiation. It may be populated by beings adapted to it, or it may have something so valuable that people live there regardless, in tightly-controlled artificial environments. ID color: Orange-pink.

//''Station''//

refers to the "terrain" of the two space stations. Although not properly planets, the huge deep- space stations qualify as planetoids at least. More than a million people live in each, in a carefully-controlled artificial world. ID color: Black.

''Esc (Escape): ''

A mission type.

''Escape Pod: ''

A capsule (not actually represented in the game) that allows characters to survive (maybe) after their ship is destroyed. Essentially, a lifeboat.

''Esp (Espionage): ''

A mission type.

''Distance Factor: ''

A measure of the length of a space route. Each factor represents approximately five light years.

''District: ''

One of the major political subdivisions of the Empire, which contains several star systems.

''FASC: ''

Field activity steps completed (during a mission).

''Flight: ''

A group of starfighters generated by rolling a die during a dogfight with a character spaceship. 

''(frd): ''

Fractions rounded down to the nearest whole number.

''FrM (Free Movement): ''

A mission type.

''(fru): ''

Fractions rounded up to the nearest whole number.

''GDN (Global Defense Network): ''

A network of tracking equipment and weapons spread over a planet's surface and as satellites in orbit, used by the player who controls the planet to defend against incoming or outgoing enemy forces.

''Generator: ''

The planet where an SWE originates.

''GeR (General Research) ''

A mission type.

''Hid (Hide): ''

A mission type.

''HtH (Hand to Hand): ''

A type of melee where the fighting is really close.

''Hyperjump (Warp Movement): ''

The special drive reactor of a spaceship "warps" space and creates a not entirely understood condition called hyperspace. The ship is here this second, and then it almost instantly moves to a location many light years away. The process is referred to as hyperjumping, warp movement, or simply jumping. 

''Impulse Drive (Impulse Movement): ''

The engines of a ship that can move its mass around in normal space, at sub-light speeds. Fine for moving within a star system, but useless to travel to other stars.

''InD (Incite Defection): ''

A mission type.

''InS (Influence Sovereign): ''

A mission type.

''INT (Intelligence): ''

A character attribute.

A measure of wisdom, cunning and IQ.

''Interception: ''

The act of overtaking enemy military units as they attempt to enter or leave orbit around a planet.

''Light Starships:''

As opposed to capital starships. Light cruisers, frigates, destroyers, corvettes, sloops, brigs, longships, heavy starfighters and transports, starships that can land on planet surfaces.

''MaC (Main Character): ''

A person with a collection of individual attributes of heroic nature, controlled directly and constantly by a player. 

''Marker: ''

A counter used during the game for informational purposes only.

''Mechanic Character: ''

A character who is a robot (a.k.a. "android" or "droid"). Most mechanics are MiC's, although there is one main character who is a "mecha". The distinction is important for certain random events.

''Melee: ''

A type of combat involving characters. It can be hand-to-hand or ranged. 

''MiC (Minor Character): ''

A person or other being which appears due to certain events and that may temporarily be under a player's control. Examples of MiC's are soldiers, companions and civilians.

''Military Ops: ''

An abbreviation for "Military Operations" (stage or phase).

''Military Units: ''

A term encompassing ground combat units and starships. Units with STR=0, such as transports, are still considered military units.

''Mission:''

An attempt by a character or group of characters to achieve a certain objective beneficial to the owner. 

''MNV (Maneuverability): ''

A character spaceship attribute.

A quantification of a spaceship's speed, agility and ease of handling.

''Mob: ''

A group of angry civilians generated by rolling a die during a Melee. 

''Monster:''

A person, animal, plant or natural phenomena (other than soldiers and angry civilians) that can be randomly encountered during a mission and usually represents a danger to the player's characters.

''MT (Mission Total):''

The result of calculating the final FASC of a mission plus modifiers, which gives a number that needs to be rolled equal to or less with a d20 to complete the mission successfully.

''NA:''

Not applicable or not allowed.

''NAV (Navigation): ''

A character attribute. A measure of a pilot's ability to handle spaceships.

''Organic Character: ''

A character who is flesh and blood, i.e. not a robot. Most characters in the game are "orga". The distinction is important for certain random events.

''P&D (Propaganda and Diplomacy): ''

A mission type.

''Patrol:''

A group of soldiers generated by rolling a die during a Melee. 

''PeF (Persuade Faction): ''

A mission type.

''Phasing Player: ''

The player who is moving or attacking in the current phase, segment or step.

''Pilot: ''

The character controlling a character spaceship that a player is moving. Any other characters are considered "passengers".

''PN (Pacification Number): ''

The result of adding a number of factors and modifiers that may allow an Imperial military force to quash a rebellion on a planet (pacifying it),

which gives a number that needs to be rolled equal to or less with a d20 to complete the task successfully.

''PRC (Plant Rebel Cell): ''

A mission type.

''PrI (Prisoner Interrogation): ''

A mission type.

''R&B: ''

An abbreviation for "Resources and Builds" (phase).

''RaM (Raise Money): ''

A mission type.

''RaS (Random Selection):''

Frequently during the game players will be asked to choose randomly among a group of items. To do so, assign numbers to each item and roll a die. For example, if you have to choose one of three ships, you could assign 1, 2 to the first one; 3, 4 to the second, and 5, 6 to the last one and roll a d6. A die roll of 5, for instance, would indicate that the third ship is selected. Alternatively, if the items are represented by counters, you can place them in a cup and blindly pick one.

For large numbers of items, you can roll a d10 or a d20, or even assign ranges in a d100 roll.

To RaS a star system, roll 2d6, with the colored die being read as the tens of a two-digit number. For instance, a roll of 2, 3 is read as '23' and indicates the Wolf 23 star system.

This is referred to as a p2d6.

To RaS a planet, use the Planet Random Selection table. 

''Rebel Secret Base: ''

A hidden planet or satellite that the Rebel player uses to stockpile material and build his units.

''Receptor: ''

A planet which may suffer the consequences of an SWE originated in another planet.

''Res (Rescue): ''

A mission type.

''RNK (Rank): ''

A character attribute. A measure of the place that it occupies in the hierarchy of its faction.

''rp (Resource Point{s}):''

A representation of men, material and capital that a player may use towards the purchase of military units and other expenses.

''Sab (Sabotage): ''

A mission type.

''sc (Stellar Credit{s}): ''

The money that players use as "small change" during the game, represented by pieces of paper of different denominations ("play money"). The usual exchange rate is: 1 rp=1000 sc.

''Screened:''

A unit in combat that is placed in the //screened// line and usually cannot fire or be fired at.

''SDT (Search and Destroy Team): ''

A force of variable composition that a player sends against a found enemy character team to try and destroy it.

''SF: ''

Special Forces.

''Shuttle:''

A small short-distances vehicle without weapons or shields, not actually represented in the game, which characters may use to move between ships in the same stack, or between a planet surface and a starship in the orbit box of the same planet.

''SOE (Shields of the Empire): ''

An Imperial organization of fanatic suicidal bombers.

''Sovereign: ''

A main character who rules the populace of a planet, but who must usually be called to commit for the player's side before it can be of use. Gaining the support of a ruler may be of great aid to a player, beyond the character's presence as an individual.

''Space Combat: ''

A type of combat involving starships.

''Space Route: ''

A line connecting two star systems, representing a well-traveled route. 

''SpR (Spark Rebellion): ''

A mission type.

''Squadron: ''

A starfighter group based on one or more starships, used during Space Combat; it represents about 8 starfighters.

''Stack: ''

A group of units (counters) that are together, either during movement or staying in one place. Exactly where a unit is stacked (or not) can be very important during play.

''Starship: ''

A military spaceship, as opposed to a character spaceship. Starships include the Moloch, dreadnoughts, battlestars, cruisers, destroyers, frigates, corvettes, sloops, brigs, longships, heavy starfighters and transports. 

''Ste (Steal Resources): ''

A mission type.

''STR (Strength): ''

A measure of a unit's ability to harm enemy units. Also a character attribute.

''Surface Combat: ''

A type of combat involving ground units.

''SO (System Opponents):''

Enemy units found randomly during missions (civilians, soldiers, monsters, starfighters) which are not in total control of the opponent, even if some technically belong to his armed forces; their existence is strictly temporary.

''SSN (Surgical Strike Number): ''

The result of adding a number of factors and modifiers that may allow a Rebel character spaceship to destroy the Moloch atrocity unit,

which gives a number that needs to be rolled equal to or less with a d20 to complete the task successfully.

''SWE (Shockwave Effect): ''

An effect representing the "shock waves" produced by an event on one planet, affecting the population of other planets.

''Tracking Routine: ''

The procedure by which GDN's and starships attempt to detect and "track" enemy character spaceships in order to attack them.

''Unit: ''

A counter that represents "something"; a body of troops, an individual, a ship, etc. 

!!1.3 GAME EQUIPMENT

''a.''

''The Game Map''

'': ''

The game map portrays the 50 planets of the core of the Stellar Empire ("the 50 jewels of the Emperor's crown"), plus one autonomous planet and two space stations. Although there are colonies on other planets, both within the depicted systems and on little known systems beyond the map edge, for the most part they are still being explored and have little effect on Imperial politics. 

The various boxes on the map represent star systems, detailing political, economic, racial and geographic information on each important planet in the Empire. Also included on the map are the game turn, phase, segment and step record tracks and other record-keeping aids.

''b.''

''The Stellar Empire: ''

The Empire is composed of six districts (officially known as Grand Duchies), each of which includes five star systems, except the Central District which has only one (our own beloved Solar System).

The Avsar special district is autonomous. The star systems are connected by space routes, which are the light gray lines that can be seen on the map. The routes represent well-explored paths which have been deemed to be the shortest and least dangerous. Each route is defined by a "distance factor" represented by a number. Every distance factor represents roughly five light years. Each star system contains one to three planets, in the form of planet tracks, which present information exclusive to each planet. The playing pieces are placed on and moved around the various spaces of the planet tracks and star systems. 

''c.''

''The Districts:''

district

Provincial boundary lines divide the map's seven districts. The Central District is small (only one system) but is the political "power base" of the Empire, analogous to Washington DC in the United States. Running in clockwise order around the core are the five outlying districts. Each sector has its own provincial government centered on a capital planet.

The Avsar district is autonomous.

''d.''

''The Star Systems''

'': ''

The 28 major displays on the game map (and one off-map) are star systems. At the left upper corner of each system is a box with a star. Note: The yellow wormhole which has Deep Space Hyper-Alpha station is equivalent to a star system in game terms.

Each star system has from one to three planets. Each of these is represented by three boxes placed along the right of the star (see the planet Earth on next page's illustration; below it is the planet Mars and the habitable satellite, a planet in game terms, Ganymede). Actually, a system may have more planets than those that are shown on the map, but they are not- or sparsely- inhabited and have no importance in the game.

Each star system contains two boxes around the star, used to place spaceships that fail hyperjump attempts. Areas that are relatively close to a star in cosmic terms are represented by the box containing the picture of the star, which is known as the "Off-Course" box even if not specifically named so on the mapboard.  The "Lost" box is used to place units that badly botched a hyperjump and are, as the name implies, lost in space.

The map is supposed to include stars in roughly a 20-light-year radius from Earth, but it is not a galactographically-accurate representation. Some effort has been made to realistically portray the most "popular" stars (like Sirius or Alpha Centauri) regarding their distance to Earth and their color, but best guesses and accommodations to the needs of the game have been used for the rest. For instance, there are dozens of stars named "Wolf" or "Lalande" in honor of the astronomers that described them, which are distinguished only by a number (like "Lalande 21185"). We have given these names to only one representative star in our game.

The crew of an off-course ship knows its whereabouts, but a few days of impulse movement and/or mini-hyperjumps are needed to reach the system itself. "Lost" ships, on the other hand, have jumped into an uncharted area and several days, even weeks, will be necessary to determine the ship's location and recalculate the route.

Note: The yellow wormhole has no off-course box. Any ship that gets an "off-course" hyperjump result will be lost instead when trying to reach this system.  

Off-course ships traveling to the yellow wormhole are lost instead because of the lack of reference points (there is no star nearby).

''e.''

''The Planets''

'': ''

There are 52 planets (and two planet-equivalent stations) in DWTE.

A planet is represented by a track with three boxes, where most of the action of the game will take place. Each planet track includes information about the planet's inhabitants, its political leaning, size, economic value and other specific properties. 

Go back to the illustration. Ships that are in space in the vicinity of the planet are placed in the orbit box, and this is where Space Combat takes place. The wormhole boxes near the space stations serve as equivalents to the orbit box regarding the latter.

The planet box contains an artistic depiction of the planet. The info box has data about the planet's name, number (note that the first two digits of the planet's three-digit number are those of its star), race, government type, resource value, environment size, type, and any other feature, on a white background. 

All planets in the Empire, even the Travisian planets, contain minorities of practically every race represented in the game (and some may even have immigrants of barbarian races from outside of the Empire). To be mentioned in the planet's Info box, a race has to represent at least a third of the population.

Some planets have no dominant race, but are potpourris of all races; such as the stations, the Avsari planet and the Rebel Secret Planet, New Hope. 

The Info box also contains four smaller boxes that are used to place informational markers regarding the planet's unrest level, global defense network strength, local monster, and to mark if a coup has occurred. Both the planet and the info boxes may be used as the planet's "surface" to place units and markers that are "on world".

Avsar II has no resources value, and is not subject to normal unrest levels. It is the base of one of the minor factions of the game, the Avsari Order, and has special rules that apply to it (see 16.2). The off-board Rebel secret planet also is treated specially, as covered in 17.4.c and 18.1.

The two deep-space stations are treated exactly as planets. The stations themselves cannot be attacked or destroyed, and have most of the same values as other planets.

The stations are irreplaceable, having been built at a galaxy-shattering price at a time when the Empire was especially prosperous. Those days are gone, and neither side would even contemplate life without the stations at the wormhole entrances. Both sides will rather let the opposition hold a station until the time comes (hopefully) when they can recover it, than lose it forever.

''f. The Cards''

: There are many different types of cards in DWTE. These include character cards, which describe the attributes of all the important personages that took part in the rebellion, for better or for worse; item cards representing spaceships, robots, and other objects of aid to characters; mulligan cards, used to cancel an unlucky die roll; Stellar Event cards used to determine a special condition for each game turn.

''g. The Playing Pieces''

: The back-printed cardboard counters provided in DWTE are used as pieces in the game. Those counters that represent something substantial (a body of troops, an individual, a ship) are referred to as "units". Other counters that are used during the game for informational purposes only are not units, and are generally called "markers".  

''h. The Dice: ''

Two twenty-sided dice, two ten-sided dice and two six-sided dice are provided in DWTE. They are used singly or in combination to produce different results as required by the game. Some of the most used variations are:

__d6:__

Shorthand for "six-sided-die roll"; i.e. if instructed to "d6", roll a six-sided die. This can further be modified. For example, 2d6=roll two dice and add the results; d6+1=roll a die, and add one to the result, etc.

__d10:__

Shorthand for "ten-sided-die roll"; i.e. if instructed to "d10", roll a ten-sided die. This can further be modified. For example, 2d10=roll two dice and add the results; d10+1=roll a die, and add one to the result, etc. A '0' result is read as '10'.

__d20:__

Roll a twenty-sided die. d20 rolls can be modified as described previously for other die rolls. 

__Percentile Dice Roll__

__ (d100 or d%):__

Whenever percentile dice are mentioned in the rules or the shorthand terms d100 or  d% appear, it means to roll 2d10, but one of them must be colored. The colored die result is read as the tens of a two-digit number. For instance, if the colored die is a '5' and the white die is a '2', the final result is '52'. A result of '00' is read as 100. 

__Percentile 2d6 Dice Roll (p2d6)__

: Roll 2d6, with the colored die being read as the tens of a two-digit number. For instance, a roll of 2, 3 is read as '23'.

__Averaged Die Roll (d6# or d10#):__

The (#) symbol indicates that a die of the appropriate type must be rolled, but any extreme results are "averaged". For a d6, a '1' becomes a '3' and a '6' becomes a '4'. For a d10, a '1' becomes a '5' and a '10' becomes a '6'.

__Halved Die Roll (&frac12; d6   or &frac12; d10):__

Roll a die of the appropriate type, then halve the result (fractions rounded up).  For instance, a &frac12; d6 original roll of 5 is halved and read as a 3.

__"
Minimum One" Die Roll (d6-x! or d10-x!):__

When a negative

modifier is applied to a die, the exclamation symbol ( ! ) indicates that any negative or zero results are read as one. For instance, the possible results of a d6-3! are:  1, 1, 1, 1, 2, and 3.

__"
Minimum Zero" Die Roll (d6-x&deg; or d10-x&deg;):__

When a negative

modifier is applied to a die, the "degrees" symbol  ( &deg; ) indicates that any negative results are read as zero. For example, the possible results of d6-3&deg; are:  0, 0, 0, 1, 2, and 3.

During play sometimes it is important to know who is supposed to roll a die or dice, i.e. the "owner" of the roll (even if for convenience a player allows his opponent to physically make the roll for him). The player whose unit or function is affecting something (not necessarily the phasing player) is the one supposed to make that die or dice roll. For instance, if the Rebel player is moving and the Imperial tries to track his spaceship, the Imperial player is the one to roll for the tracking.

''i. Other Materials:''

It is recommended that the players each have a notepad and a pencil to keep track of various game events. An electronic calculator might also be useful.

!!1.4 SOLITAIRE PLAY

''a. General: ''

To play the game solitaire, the player must set the Imperial secret facilities face down and must not look at them until the Rebel side discovers them. This implies that you must be more careful in protecting all the possible facility locations, even dummies (which is a good idea anyway even in a two-player game).

As the player, you know the locations of the Rebel secret bases, but you should avoid sending any extraordinary Imperial forces to their vicinity until the Imperial side has actually discovered them. 

Being the only player, you already know the composition of all starfleets, and an important "fog of war" element is lost. However, you can cover the displays and not look at them during the opponent's turn. Inevitably you will forget in many cases exactly what is where.

Aside from the above, playing solo should be no problem; just be honest and use each side to its best in its turn. Always try to make the best decisions for both factions; even if sending that killer Special Forces team against your favorite Rebel Action team breaks your heart...

!!1.5 PLAYER AGREEMENTS

''a. General: ''

Players are allowed to make agreements

between themselves, as long as they do not contradict a rule or alter the normal game mechanics. For example, an Imperial player could offer to release a prisoner in exchange of the Rebel agreeing to leave a certain planet alone for a number of turns. Players could make a "cold spy war" pact (no assassinations), or declare a truce on a certain planet. 

Examples of what can't be part of an agreement: Exchanging money or units (since no mechanism to do it exists in the rules), altering unrest levels directly, ignoring the effects of a random event, etc.

!''2. SEQUENCE OF PLAY''

A game turn consists of a Preliminary stage, a Missions stage, a Military Operations stage, and a Final stage.

''PRELIMINARY STAGE''

''STELLAR EVENTS PHASE''

The Rebel player draws a Stellar Event card. The players carry out its instructions. The Initiative points total is calculated.

''RESOURCES AND BUILDS (R&B) PHASE''

The Imperial player collects taxes from a district and adjusts his Resources track accordingly. He also calculates the income he receives from other sources and adds it to his track. The Rebel player may also receive resources from Rebel-controlled planets or other sources. 

The Imperial player pays upkeep. Then both players may expend Resources points from their respective Resources tracks to purchase military units, create bases and improve GDN's. Units purchased are immediately placed on the map or on a display. Both players may convert resources points to stellar credits for their cashier. The Imperial (and sometimes the Rebel) may activate bounty hunters by placing or raising bounties.

''MISSIONS STAGE''

The Rebel always moves first in this stage.

''REBEL MISSIONS PHASE''

''Team Organization Segment: ''

The Rebel player assigns all of his characters into //Action// //Teams// by placing an identifying counter upon their stack. He may divide a stack of characters if he wishes them to split into different teams.  While assigning teams, the player may also define any characters that will do nothing in this phase in order to rest and heal by placing a "Rest" counter upon them. Special Forces detachments may be assigned to eligible military units. Rebel cells may be upgraded. Money (stellar credits) may be distributed to teams. One hit may be removed from each organic character that is not in wounded status, due to natural healing.

''Imperial Search Segment: ''

The Imperial player may conduct searches on planets where there are detected Rebel teams, in an effort to find and attack them. 

''First Team's Action Segment:''

__Preliminary Step:__

The Rebel player picks one of his teams and assigns it a mission. Then he rolls for pre-mission Random Events, and carries out any applicable event. After that the team might buy a spaceship. Character(s) of the team have a last chance to be assigned to rest and heal.

__First Action Step__

: The team engages either in movement, in field activity, or in extrinsic activity. In the case of field activity, a random events roll is made and its results carried out.

__Second, Third, Fourth, Fifth and Sixth Action Steps__

: Same as the first.

__Final Step__

: The FASC for the mission are calculated, and a d20 is rolled to determine the mission's outcome.

''Second, Third, Fourth... Nth Team's Action Segment:''

The Rebel player picks another team and repeats the sequence given above, until he runs out of teams that will perform a mission.

''Reset Segment''

All Rebel team markers are flipped over from their "Done" side to their front side.

''FIRST REBELLION COMBAT PHASE''

If Rebel forces that appeared in the previous phase due to a rebellion are in the same surface or orbit box as Imperial forces, the Rebels may engage them in Rebellion Combat.

''IMPERIAL MISSIONS PHASE''

''Team Organization Segment: ''

The Imperial player assigns all of his characters into //Action// //Teams// by placing an identifying counter upon their stack. He may divide a stack of characters if he wishes them to split into different teams.  While assigning teams, the player may also define any characters that will do nothing in this phase in order to rest and heal by placing a "Rest" counter upon them. Special Forces detachments may be assigned to eligible military units. Money (stellar credits) may be distributed to teams. One hit may be removed from every organic character that is not in wounded status, due to natural healing.

''Rebel Search Segment: ''

The Rebel player may conduct searches on planets where there are detected Imperial teams, in an effort to find and attack them. 

''First Team's Action Segment:''

__Preliminary Step:__

The Imperial player picks one of his teams and assigns it a mission. Then he rolls for pre-mission Random Events, and carries out any applicable event. After that the team might buy a spaceship. Character(s) of the team have a last chance to be assigned to rest and heal.

__First Action Step__

: The team engages either in movement, in field activity, or in extrinsic activity. In the case of field activity, a random events roll is made and its results carried out.

__Second, Third, Fourth, Fifth and Sixth Action Steps__

: Same as the first.

__Final Step__

: The FASC for the mission are calculated, and a d20 is rolled to determine the mission's outcome.

''Second, Third, Fourth... Nth Team's Action Segment:''

The Imperial player picks another team and repeats the sequence given above, until he runs out of teams that will perform a mission.

''Reset Segment''

All Imperial team markers are flipped over from their "Done" side to their front side.

''MILITARY OPERATIONS STAGE''

The player who currently holds the Operational Initiative decides who moves first in this stage. If neither player holds it, it is randomly determined.

''FIRST PLAYER'S MILITARY OPERATIONS PHASE''

''First Player's Starship Movement Segment: ''

The first player may move his starships (and ground units being carried by transports) plus any characters going as passengers on those units, from any surface or orbit box of one planet to any surface or orbit box on the same or a different planet. The player may attempt to move his starships //past// enemy units. The enemy may try to intercept these passing starships, and Interception Combat can occur. If a starship or stack of starships ends its move in an Orbit box where the enemy has starships, Space Combat will happen in the following segment.

If a unit is being moved from one star system to another, it is moved by //hyperjumping.// Under certain circumstances, characters may use shuttles to move between the surface and the orbit box of the same planet, and vice versa.

''First Player's Space Combat Segment:''

In each orbit box where there are starships belonging to both players, Space Combat between them ensues. The first player is considered the attacker. If either player has a main character on one of the starships involved, or in a character spaceship that happens to be in the same orbit box, he may name it as a commander in that combat.  

''First Player's Surface Combat Segment:''

Ground units of the first player that are in a transport in an Orbit box may land on the planet. Light starships may escort them. Then Surface Combat may occur in every planet where ground units of both sides are present. If either player has a main character on the planet, he may name it as a commander in that combat.

''SECOND PLAYER'S MILITARY OPERATIONS PHASE''

''Second Player's Starship Movement Segment: ''

Same as the first player's, except that now the second player's units move.

''Second Player's Space Combat Segment: ''

Same as the first player's, except that now the second player's units are the attackers.

''Second Player's Surface Combat Segment: ''

Same as the first player's, except that now the second player's units are the attackers.

''FINAL STAGE''

''CONCORDANCE ALLEGIANCE PHASE''

The Rebel player checks to see if any planets in rebellion are now loyal to the Concordance, and implements any Shockwave Effects that may result.

''SECOND REBELLION COMBAT PHASE''

If Rebel forces that appeared in the previous phase due to a rebellion are in the same surface or orbit box as Imperial forces, the Rebels may engage them in Rebellion Combat.

''REPAIRS PHASE''

Hit markers may be removed from some units of both sides through repairs. 

Hit and Rest markers are removed from resting characters, and they rejoin their team (if possible).

After the end of the Final stage, unless one of the players has achieved a "Sudden Death" victory, the game turn marker is moved to the next game turn box and a new game turn will begin.

!''3. MOVEMENT AND STACKING''

!!3.1 MOVEMENT

'' OF UNITS''

''a. General: ''

During the appropriate segments of his player turn (see section 2), a player may move any or all of his characters, characters spaceships and/or military units. A player is not forced to move every one of his units, or any of them. (Exception: Lost and off-course ships must be moved; see 3.2.f). 

There may be special rules that limit a unit's movement or how far it can go. Units are moved to/from planet surfaces and orbit boxes, on the same or a different planet. Units may be moved individually or together. There is no "cost" to move a unit; either it is able to make a move or not. However, obstacles or unforeseen events may affect a move's outcome. 

Some units may be able to move in more than one segment of their player turn, as long as they meet the requirement for movement in each particular segment.  

The details of how the different unit types move are given in the following sections.

A player must announce the destination planet of a hyperjumping unit before actually rolling the dice to resolve the jump. However, he need not specify if it's going to the orbit box or the surface. He can decide that upon arrival.

!!3.2 HYPERJUMPING

At the dawning of space exploration, Terran scientists discovered a dimension parallel to the planes of the known universe, and developed a method of entering that dimension and exiting it at a determined point light-years away. A ship could be fitted with a special engine that "warps" space and creates a not entirely understood condition called hyperspace. The ship is here this second, and then it almost instantly moves to a location many light years away. This enabled the human race to quickly expand and come into contact with other races, eventually creating the Stellar Empire.

Hyperspace is not a stable condition, so even the best navigator will sometimes find his spaceship exiting the turbulent dimension nowhere near its intended destination.

''a. General: ''

Starships and character spaceships must use hyperjumping to move from one star system to another. They use normal, or impulse, movement to move from planet to planet on the same system.

''b. Space Routes''

'': ''

On the map, star systems are connected by gray lines called space routes. Every route specifies the distance involved as a factor (from one to three). When a spaceship will jump from one star to another, the distance factor of the space route connecting both is taken into account to determine the column used on the Hyperjump table.

If there is no direct connection between the stars in a hyperjump, the player must add the distance factor of other space routes that the ship must "connect through"   to get   there.  Jump routes should be the shortest possible.

For instance, there is no direct space route connecting the star Procyon to Sol. However, you could fly to Sirius which is one distance factor away and from there to Sol adding the two distance factors of the space route that joins them. The total distance of the jump would be three. The player must 

not take the route via Lalande, because the total distance would be five.

The spaceship does not actually stop at each intervening star; the jump is assumed to be direct from origin to destination. The routes are used only to calculate distance.

''c. Procedure: ''

The NAV rating of the pilot of the spaceship is used for hyperjumping. It can be modified by the spaceship's CMP rating. The NAV rating is compared to the distance of the jump and 2d6 are rolled, consulting the Hyperjump table.

If the NAV rating exceeds the distance of the jump, use the leftmost column (with the black star). If both values are equal, use the 0 column. If the distance is greater than the NAV rating, use the column that is equal to the difference. If the differential is greater than five, use the rightmost column and add one to the dice roll for every number by which the differential exceeds five.

The NAV rating of all military starship pilots is four. 

''d. Joint Hyperjump''

''s: ''

Military starships may make jumps as a stack; this is called a joint hyperjump. For every ship in excess of three in the stack, add one to the dice roll. Note: Character spaceships being "towed" by starships are not counted, but towed crippled starships are. 

''e. Space Command: ''

If 

hyperjumping military units have a commander, subtract its COM rating from the number of starships in the stack for purposes of calculating the modifier given in 3.2.d above. 

Example: If Brent Smith (COM=5) is commanding a stack of nine starships jumping together, they are treated as if they were only four, suffering only a +1 drm for the jump.

''e. Emergency Hyperjump''

''s: ''

Some jumps undertaken hastily to disengage from combat are considered "emergency" hyperjumps. These jumps always end in the lost box of the same system where the emergency hyperjump originated, without need of consulting the table.

''f. Off-Course and Lost Boxes: ''

Bad jumps can take ships to the off-course or lost boxes. Ships beginning a segment or step in which they could move in one of these boxes must attempt to move towards a planet; they cannot remain in these boxes voluntarily. Normally no combat can take place in these areas.

A ship beginning its move in an off-course

box is considered to be "in the system" and may either move by impulse drive to any planet there, or hyperjump to another star system without distance penalty. 

A ship that is sent to the lost

box must roll 2d6 (every ship rolls separately even if this was a joint hyperjump). A "Lost" counter with a value equal to the result of the colored die is placed upon the spaceship. A '6' on the white die will result in a military starship being damaged; a character spaceship has to roll on the Hyperspace Random Events table instead. Only starships with the same 'Lost' number may stack, and then only if they were stacked before getting there. 

A spaceship that finds itself in a lost box at the beginning of a movement segment or step must use hyperjump at a distance equal to the number on its "Lost" counter to arrive at the same star system, or it can go to another system by adding that number to the distance.

''g. The Wormhole: ''

One of the most astounding discoveries of the last centuries has been the stable wormhole

that connects Armes and Marat districts. A unit can jump from one wormhole entrance to the other as if it were a distance factor of one. The wormhole connection can be a leg of a longer hyperjump involving other space routes.

For example, a starship could jump from Procyon 61 to Rotina (distance 2), enter the blue wormhole and exit at the yellow wormhole (distance 1), and from there to Avsar 12 (distance 1). The total distance of the hyperjump is 4. Notice that a jump from Procyon to Avsar not using the wormhole would be at least distance 8.

There are a number of different situations that may arise when using the wormhole:
<ul> <li>*A hyperjump that uses the wormhole as part of the voyage, but that does not end in one of the wormhole entrances, is resolved as any other jump by a single dice roll on the Hyperjump table. Any ship that is off course or lost will be placed in the corresponding box of the destination star system.
<li>*If the destination of the jump is one of the wormhole entrances, via the wormhole, any ship that is off-course or lost will be placed in the corresponding box of the entry (near side) wormhole. The moving ship(s) never got to enter the wormhole.
<li>*If the destination of the jump is one of the wormhole entrances, not via the wormhole, it is resolved normally as any other hyperjump.
</ul> 

The yellow wormhole is special in that it has no star and no Off Course box. Any ship arriving here that would be off course is lost instead, with all that implies. 

There is another interesting situation about wormholes. Any unit that will use the wormhole is assumed to stop momentarily at each entrance, so it is subject to interception or tracking by enemy units in the wormhole boxes. After disengaging from such obstacles, the unit continues its already-rolled-for hyperjump and implements the end results of the jump as described above. It does not make a new hyperjump dice roll.

A player may choose to ignore the wormhole when determining the shortest route for a hyperjump.

''h. The Anomaly: ''

The distance between the star systems Cygni 31 and Ophiucus 33 is long, unless you take the shortcut through the time-space anomaly

... (Shiver). Any spaceship (or moving stack) that uses this route must roll a d6, and on a 5-6 result it will be lost, but inside the anomaly; not at the destination star. Make a 'Lost' dice roll (3.2.f) as for any other 'Lost' result.

If the ship does not get lost inside the anomaly (d6=1-4), then the regular hyperjump dice roll is made and any off-course or lost results will leave it in the corresponding box of the destination star.

A ship beginning its move inside the anomaly can only announce Cygni or Ophiucus as a destination, and must roll 

under column 5 of the Hyperjump table (regardless of the pilot's NAV). If a 'Lost' result comes up again, the ship remains lost inside the anomaly, not at the destination star system's lost box. An 'Off Course' or 'No Effect' result will take the ship out of the anomaly and it is placed in the proper box of the destination star system. 

When determining the shortest distance for a hyperjump, a player is never forced to go through the anomaly.

!!3.3 STARSHIP MOVEMENT

''a. General: ''

Starships move only in the owning player's Military Ops phase, in the Starship Movement segment. The player holding the Operational Initiative (section 22) decides whether he or his opponent will move first in a given Military Ops stage.

''b. Movement in the Starship Movement Segment: ''

Every starship in the phasing player's side may move as he wishes (exception: Imperial Strategic Restrictions, section 19) during the Starship Movement segment. The player may attempt to move his starships past enemy units, and the enemy may try to intercept these passing starships. If he succeeds, an immediately resolved Interception Combat occurs.

Capital ships move only from orbit box to orbit box, since they cannot land.  A light starship can be moved from a surface or orbit box in one planet to a surface or orbit box in the same or another planet. 

A starship that is taking off from a planet is assumed to first fly up to the same planet's orbit box, and from there continue its voyage. Likewise, a starship arriving at a planet is assumed to first pass through the orbit box, even if it immediately lands.

Friendly starships in the orbit box may join starships that are coming up from a planet's surface and go along with them for the rest of their move. Likewise, after arriving at a new orbit box some starships of a stack could remain in orbit while the rest land.

If starships of the phasing player end their move in an orbit box where the enemy has starships, (normal) non-Interception Space Combat will ensue. Interception does not occur against such ships. 

Notice that if enemy starships are trying to //pass through// an orbit box occupied by your units, you may attempt interception; but against those that stay there looking for a fight, combat is resolved until the Space Combat segment.

''c. Off-Course Starships:''

A stack of moving starships that gets an off-course

result from a hyperjump has a chance of being able to complete its move. A result equal to or less than the COM rating of any commander in the stack must be rolled with a d6 in order to be allowed to complete the move and arrive at the destination planet. If no commander is present, a die roll of '1' is needed. A die roll of '6' is always a failure regardless of the COM rating.

If an off-course stack of starships that managed to complete its move as described in the preceding paragraph will join a battle, it will automatically arrive until the fourth combat round, and it cannot be coordinated (7.3.h) by a commander.

Lost starships cannot attempt to complete their move. They remain lost until the next turn.

''d. Ground Units: ''

Ground units, except garrison types, may move in the Starship Movement segment of the Military Ops phase by being carried in transports, a type of starship that is inherent to the ground units. Every time a ground unit flies, a transport counter is placed upon it. When the ground unit lands, the transport counter is removed and has no effect on the game until the ground unit flies again.
</span>
Furthermore, every time a ground unit flies, it gets a brand new transport. Hits and damage on
</span>
transports that are removed from the game are not kept track of. 

In the Surface Combat segment, ground units of the phasing player located in an orbit box may land previous to any combat.

!!3.4 CHARACTER MOVEMENT

''a. General: ''

Characters 

normally move in the Missions phase, during their team's Action segment (see 11.2.d). Aside from that, characters may also move passively aboard starships as the latter move in the Military Ops stage.  Characters may be transported thus even if they had moved in the Missions phase.

''b. Starship Passengers: ''

As a general rule, a 

character may not be aboard more than one starship during the Starship Movement segment; but otherwise the character may be able to make quite a few displacements. There is no limit to the number of characters that can be passengers in a starship. A starship moving with character passengers abides by the Imperial Strategic Restrictions applicable to it; not those applicable to the characters.

Characters may not be passengers on heavy starfighters.

A character may board a starship on a planet before it takes off, even if not stacked with it at the beginning of the segment. It can be carried to wherever the starship goes and if it lands on a planet, it can debark (unstack) from the carrier there. 

If a character is stacked under a starship (i.e. in it) at the start of the movement segment, it may be debarked on the planet before the ship leaves.

A shuttle

is a small, short-range vehicle used to move from a starship to a planet's surface or from ship to ship. Shuttles do not appear in counter form but are inherent to all starships and can be used under the right circumstances. A character can use a shuttle to move from a planet up to a starship in orbit before it departs, then be carried by it to wherever it goes. The shuttle can also be used to debark any current passengers and place them on a planet before the starship leaves the orbit box, or to debark passengers after the starship arrives at a new orbit box. A character can use a shuttle to board a ship from one planet and then again to debark in a new planet, all in the same segment.

A character can also use a shuttle to move to a character spaceship from a starship in the same orbit box and vice versa, before or after the starship moves. A character might even be transferred to/from a character spaceship in orbit when the starship passes through the orbit box while moving up from the planet (going elsewhere), or when coming from elsewhere and going down to the planet. 

A shuttle can only be used to move from surface-to-orbit and vice versa if the planet is currently friendly-controlled with no enemy ground military units on the planet. Shuttle transfers within the orbit box are always allowed, regardless of enemy status on the planet surface (or the orbit box). 

Characters that debark from a landed or in-orbit starship onto a planet surface are automatically detected.

''c. Movement during Space Combat:''

During a Space Combat, whether in the Space Combat segment or due to an interception in the Starship Movement or any other segment, characters may automatically and without harm shuttle to/from any starship/character spaceship in the Orbit box at the beginning of any combat round. 

!!3.5 STACKING

''a. General: ''

Units that are moving or keeping a position together are called a stack, and in effect they are defined on the mapboard by stacking their counters in a single pile.  Where a unit is stacked is important for several game functions, and players should take care of how they place their unit counters.

Normally all the military units of the same side that are occupying the same box should be stacked together, but they may temporarily form separate stacks if it is convenient or required for some reason.

Different character Action teams should //never // stack together except when they are sharing a spaceship to travel, and even then they must unstack as soon as possible. Furthermore, you may not join nor split character teams at any time other than the Teams Organization segment.  

Characters may stack/unstack with military units on a planet surface only during the Teams Organization segment and not at any other time, unless a specific rule allows it (for instance, 8.3.b allows a character not stacked with ground units to stack with them if it is named to command them).

''b. Planet Surface Stacking: ''

The maximum number of legion/division-sized ground military units that a planet surface may contain is equal to the planet's environmental size. This limitation is per player. For instance, Mars 112 is size 5; the Imperial player may have up to five legion-sized ground units there, and the Rebel may also simultaneously have five division-sized ground units there. 

Brigade-sized units count as half a legion for stacking, while battalions, companies and garrisons have zero stacking value (i.e., they may stack for free).

Surface stacking limits may never be exceeded; if a planet surface is full, a new ground unit simply cannot enter. There is no limit to the units of other types (character, character spaceship, or light starship) that may occupy a planet.

A character stacked with military units is more secure from certain threats and can lead the military units in combat, but it cannot conduct missions. Any character that stacks with a military unit on a planet surface is automatically detected.

''c. Orbit Box Stacking: ''

There are no limits to the number of units of any type that can stack in an orbit box. Stacking is otherwise similar to that of the surface of planets. A character that stacks with a military unit in space is not automatically detected, but will be detected if it debarks from the ship to the surface. ChS's in space may stack/unstack freely with military units, at any time. 

Characters in orbit must be inside a character spaceship or starship. Ground units must be inside a transport.
!''4. COMBAT (GENERAL)''

!!4.1 INTRODUCTION

''a. Combat Categories''

'': ''

Combat for all kinds of units is resolved using basically the same procedure, but combat between different unit types cannot happen. The types of units in the game, each with its own combat category, are defined below. Details of each category that differ from the generic rules presented in this section can be found in the later sections that describe the specific unit types (sections 5-8).
__''COMBAT CATEGORIES''__
''Characters: Melee.''
''Character spaceships: Dogfight.''
''Starships: Space Combat.''
''Ground Military: Surface Combat.''

''b. Combat Values''

'':''

Every unit has a Strength (STR) rating which indicates the column of the Combat Results Table (CRT) that it rolls under when attacking an enemy. This value can be modified (increased or decreased) by several circumstances in the game. Reductions and increases are all cumulative, but STR may never be less than zero. Any unit that has a STR of zero (either originally, or because of reductions) does have a token firepower and can attack.

The Endurance (END) rating represents a unit's toughness and durability in the face of enemy attacks. Generally, a unit will be destroyed if it receives or accumulates hits equal to or greater than its END. If it receives or accumulates hits equal to or greater than half its END, but less than the full END value, the unit will be "damaged" (a.k.a. "damaged status") and the counter is flipped over to its reverse side ("damaged side") to represent this. Damaged units have decreased STR values and other disadvantages in the game.

More properly, characters are said to be "wounded" when they reach this state, and ground military units are "decimated". However, throughout the rules we will frequently use the term "damaged" to encompass this concept whatever the unit type.

''c. Attacker''

'' and Defender''

'': ''

The player that initiates or provokes a battle is termed "the attacker". This is usually the phasing player, but not always. The other player is "the defender". Sometimes in the rules a defender's unit is said to "make attacks". This refers to his unit firing at the enemy and does not affect his status as "the defender".

''d. Self-destruction:''

A player may eliminate his own units (except MaC's) voluntarily, but only at the beginning of his Military Ops phase. He cannot remove them at any other moment, nor can he ever kill one of his own MaC's.

!!4.2 COMBAT

'' PROCEDURE''

''a. Set Up and Target Designation: ''

Whenever a battle will occur, players must set up their pieces on any convenient flat surface. Small battles can probably be resolved in place, or in the blank areas near the star system. However, for larger battles it might be best to move the units off board. A "Battle Raging" counter should be placed where the combat is taking place, as players may forget it in the heat of battle. 

The defender sets up first. He may place his units in one line, if all will fight, or create a second line behind the "front" line with units that he wishes to protect because they are weak or valuable. At least one unit must be placed in the front. The second line is called the "screened" line, and the units therein are said to be screened by those in the front. In other terms, the units in the front are said to be "active", while those in the screened line are "inactive".

The attacker then places all his units in the same manner. He announces the attacks that each of his units will make, placing them if possible adjacent to their declared targets. This may be complicated in the case of units splitting their STR between two or more targets, and it may be necessary to make mental or written notes regarding the announced attacks. If there are screened defending units, the attacker may not declare them as targets now, but he can hold the fire of one or more of his units (or even just part of their STR) in hopes of breaking through to them later. 

The defender then announces his units' attacks. First, each unit that is the target of one or more attackers must attempt to match their STR by firing back at them with at least the same STR factors.  If after matching the attackers' STR the unit still has surplus STR, it can be used to fire at other enemy units in the battle. Of course, the player still has the choice of using the surplus STR on the same attackers. If there are screened attacker units, the defender may not declare them as targets now, but he can hold the fire of one or more of his units (or even just part of their STR) in hopes of breaking through to them later. 

Defenders that are not targeted by any attacker unit are free to fire at any target available. Inactive (screened) units may not fire (Exception: If a breakthrough occurs). 

''b. Attack Resolution: ''

After all attacks by both sides have been designated, they are resolved in any convenient order, attacker first. Combat is considered to be simultaneous, so every unit gets to roll its attack(s) regardless of hits it receives in that round. Every unit makes its attack(s) separately, rolling 2d6 and consulting the CRT. The result obtained there indicates the number of hits that the target receives. 

A unit can apply its entire STR against a single target, or split it between two or more targets. When it does the latter, however, it must make two (or more) separate dice rolls, each under the column of the CRT corresponding to the fraction of STR applied to that target.

If a unit's STR exceeds 10 and it is firing at a single target, it must make two separate dice rolls by splitting its total STR in two. 

A suggested system to avoid confusion is to mark all the hits that the attacker causes, but without flipping over those targets that reach damaged status or removing eliminated units until after they have fired.

''c. Hits''

'': ''

If the hits equal or exceed the unit's END, it is destroyed. If the hits equal or exceed half the END, but less than the full END, the unit is damaged (see 4.1.b).  If a unit is not destroyed by hits, a marker with the number of hits suffered is placed under it. A marker with the total hit tally is kept under it even if it is flipped over to its damaged side. 

Hits are cumulative. If a unit already has a hit marker when it receives more hits, they are added and a new hit marker reflecting the new total is placed.

''d. Disengaging: ''

When combat is going against a player's forces, or if he simply isn't in the mood to fight, he can attempt to disengage with part of his forces or all of them. The attacker must announce if he will attempt retreat before the defender. The announcement is made at the beginning of a combat round (even the first). There are two forms of disengagement

: Hasty, which is a simple attempt to run away immediately without much thought, and Prepared, where the units first "soften up" the enemy with concentrated firepower and intelligently (even if they are in a bit of a hurry) plan their escape. 

What happens to units after disengagement is handled differently for each combat category and therefore is treated in detail in each unit type's chapter.

The player that is not disengaging has the choice of "letting go" an enemy retreating force and end the combat without need of rolling dice.

__Hasty__

:

At the beginning of every round (even the first) a player may announce that he is attempting to break off with some or all of his forces. To resolve this, subtract the combined STR of the retreating player's active units from the combined STR of the enemy's active units. The actual STR of involved units (including any modifications due to items, commanders, surprise, etc.) is used in this calculation. 

Then consult the appropriate line of the Disengagement table and roll a d10. The number before the slash is the result that must be rolled (or less) for the //active// units in the battle to disengage. The number after the slash is what the //inactive// units need to roll equal to or less to get away. The attempt of both active and inactive units is resolved with the same die roll, and it may be that the inactive units flee while the others have to remain.

Any unit that attempts to hastily disengage but fails has its STR reduced in one for its attacks in that combat round.

__Prepared__

:

In this instance, the player announces that his forces will try a Prepared disengagement. For this round, they stay put and fight normally, then in the next round they use the row of the Disengagement table that is three rows above the one that would normally be used (drm still apply). Even if they don't disengage, they do not suffer the adverse STR modifiers of a botched Hasty disengagement, and may try again (as Prepared disengagement) next round.

If a side announced a Prepared disengagement but in the next round the situation looks so good that continuing the fight is desirable, the disengagement can be canceled, but the "prepared" status is lost. Further, a player can't announce a new Prepared disengagement for the next round at the same time that he is canceling a previous one. It may not be delayed; a side must attempt the Prepared disengagement, or cancel it outright. 

''e. Combat Rounds''

'': ''

If after the first round of combat units of both sides remain in the battlefield, a new combat round can be fought. There is no limit to the number of rounds that can be fought as long as both players have forces willing or forced to fight.

''f. Breakthrough''

'': ''

If every unit in a player's front line is destroyed, the enemy may use his units that had held back their fire before to attack the units of the screened line in the same combat round. The screened units may fire back. If a breakthrough is not achieved, those units that had withheld their attacks lose them. They may not switch targets.

''g. System Opponents''

'' (SO): ''

Soldiers, starfighters, monsters and angry civilians found during missions are considered system opponents. Although the enemy player rolls their attacks, he has little more control over them. SO never retreat. SO never hold back their fire in hopes of breaking through; they always concentrate on the defender's front line. RaS is used to determine which defending character each SO attacks. 

When SO are multiple, they must be spread as evenly as possible (i.e., a defending character may not be assigned two attackers before every other active character has at least one, it may not be assigned three before every other active character has at least two, etc.). Each SO then applies its whole STR to its target. Multiple SO are redistributed at the beginning of every combat round.

On the other hand, when only one SO is attacking, it must spread out its STR factor among the active enemy characters as evenly as possible (i.e., a defending character may not be assigned two STR factors before every other active character has at least one, it may not be assigned three before every other active character has at least two, etc.). The STR factor of a single SO is redistributed at the beginning of every combat round.

''h. Surprise:''

In general, 

whenever a combat will occur each side must roll 2d6, and the side rolling 4 or less will be surprised by the other. A surprised unit has -1 STR, and enemies firing at it have +1 STR. A surprised unit cannot announce or attempt disengagement. If a player would like to use a Prepared disengagement, for instance, he could not announce it until the second combat round, and effect it until the third. 

If both sides are surprised, the STR effects would cancel out, but both sides would still be unable to announce disengagement on the first round. Surprise is only in effect for one combat round; it wears off in the second and subsequent rounds.

Some monsters and other SO enjoy automatic surprise; there are also some other situations in which a side is automatically surprised (such as a starfleet in blockade stance). In this case, the other side does not roll for its own surprise; only the "automatically surprised" side is surprised. 

On the other hand, some characters or items have the attribute of preventing surprise. When both factors exist, the latter takes precedence and no surprise (on either side) occurs.

The interceptor in Interception Combat is never surprised (exception: blockade stance). The intercepted side rolls for surprise normally.

In military combat, commanders may modify their side's surprise dice roll, reducing the chances of it being surprised.

//Shorthand Surprise Die Roll: //

If no modifiers apply to a surprise dice roll, you can roll a single d6 for surprise instead. The chances of getting 4 or less on a 2d6 are the same as those of getting a 1 on a d6.

!''5. CHARACTERS''

The heart and soul of DWTE

are the characters. As in all great space adventures, the huge starships may bumble about, but they do not determine the fate of the rebellion saga as much as the astounding contributions of a handful of heroes. The characters perform missions through which they hope to sway the people to join and support their cause, undermine the plans of the enemy and further their own side's goals.

!!5.1 MAIN CHARACTERS

''a. General: ''

There are 32 Rebel and 21 Imperial main characters (MaC's), the heroes of the story, but it may be that not all of them will appear in every game. There are also a few neutral characters, and one character on each side can switch allegiance under certain circumstances. Active MaC's are totally and permanently under the control of the player (unless killed or captured). Players are assigned a number of these characters at the beginning of each scenario, and they may gain more as the game proceeds.  Each MaC is represented by a card and a counter. The card is held by the player and describes the character's attributes. The counter is used on the map to show the location of the character, and portrays some of the most frequently used attributes.

''b. Main Character Cards and Attributes:''

Each MaC has a unique personality and special talents or weaknesses. Its characteristics are detailed on the corresponding card

. Cards representing characters that a player currently controls should be kept face up in front of him. Characters moving or performing a mission as a group should have their cards placed together. If a character has an item, it should be placed underneath its card. 

The cards contain the following information about the character:

__Historical background__

: What made the character join the war for one side or the other. This information is found on the back of the card.

__Name, allegiance, race, gender, home planet__

: General characteristics.

__Makeup:__

Organic or mechanic.

__Nobility:__

If the character has a title, it may be considered nobility

on certain planet or planets. 

__Strength:__

A measure of the power of the character in combat, similar to that of other units.

__Endurance__

: The character's ability to withstand damage; similar to the END of other units.

__Agility:__

Represents the character's nimbleness and reflexes. Characters with high AGI may be able to dodge a blow during melee. Every time a character with AGI greater than three gets hit in a melee (ranged or HtH), a d6 is rolled. A character with AGI=4 dodges the blow on a roll of 1, one with AGI=5 dodges it on a 2 or less, and one with AGI=6 with a 3 or less. This is noted by a number on the upper left corner of the card, called the "avoidance factor

". A dodged blow has no effect (i.e., it does not cause hits to the character). A blow is defined as all the hits caused in a single attack by a single attacker. Different avoidance die rolls are made if the target suffers more than one attack in a combat round.

Note: Characters with Agility 3 or less have //no// Avoidance factor. Therefore, they suffer no adverse consequences from anything that subtracts from that factor. 

__Intelligence:__

The character's wits and wisdom.

__Charisma:__

A measure of good looks, good manners, and having a way with people.

__Courage:__

You may have strength, you may have speed, but you also need the guts to use them.

__Rank:__

The character's standing among his side's forces. 

__Command:__

The ability to lead military units in battle.

__Navigation:__

How good a pilot and navigator the MaC is.

__Special:__

Most MaC's have one or more special talent

s, which are what make them different from the rest. Talents are self-explanatory

.

Note: If a special FASC modifier is given for a character and it is underlined, it means that it can be used only if the character is mission leader. If not underlined, it is enough for the character to be in the team to contribute the modifier to the mission. If the modifier is in parenthesis, it has limited application.

''c. Character counters:''

The players use character counters to show in which planet, orbit box, or off-course area the characters are located. If currently inside a spaceship, their counter should be placed underneath the ship counter. When the character is on a planet surface, the counter should be placed on top of the spaceship. The upper band of the counter shows the character's Command value and its avoidance factor, if any. The lower band presents the STR and END of the character. The backside of the counter represents wounded status, and reflects the lowered values of the character.

''d. Appearance: ''

Most MaC's appear in the game by being drawn from the out-of-play characters deck, either at game start or as called for by random events. Characters to enter play are chosen by putting all the character counters in a cup and blindly picking one.

!!5.2 MINOR CHARACTERS

''a. Companions: ''

These

are semi-intelligent beings (robot or animal) that will aid their owner by increasing a characteristic or performing some other function. They are considered MiC's and count as passengers in spaceships. On the other hand, they are also items that are owned by one MaC or another. In a melee, they must be placed on the battlefield. Usually it is a good idea to place them in the screened line, but that's up to the player. See section 12.

''b. Soldiers: ''

Random events may temporarily assign soldiers

as armed escorts to a team. As long as they are with the team, the player may use them as any other minor character. An elite soldier counter like those used as SO's in random melee is stacked with the team. If the need of knowing a soldier's personal attributes ever comes up, they are: STR 3, END 6, AGI 3, INT 1, COU 3, everything else 0. The same values apply to any elite soldiers that appear in the game, such as the palace guards of some sovereigns.  

If the Rebel player has a Rebel camp in the same planet as a mission team, he may have guerrillas

to accompany it. Guerrillas are represented by regular soldier counters. If the need of knowing a guerrilla's personal attributes ever comes up, they are: STR 2, END 4, AGI 3, INT 1, COU 3, everything else 0.  The same values apply to any line/regular soldiers that appear in the game, such as the palace guards of some sovereigns. 

''c. Civilians:''

Random events may temporarily assign a civilian

guide or asset to a team. As long as they are with the team, the player may use them as any other character, but since they are so weak and valuable it's a good idea to protect them. A civilian counter like those used in random melee is stacked with the team. If the need of knowing a civilian's attributes ever comes up, they are: STR 1, END 2, AGI 2, INT 2, and everything else 0.

!!5.3 CHARACTER COMBAT SPECIFICS

''a. Disengagement''

'': ''

When characters disengage from Character Combat, the battle ends and they are placed on the planet's surface box, detected.

''b. Capture''

'' attempts: ''

If the attacker has characters or soldiers in his force, he can declare that he is attempting capture by setting "lasers on stun

". In this case, each attacking unit that is using a ranged-type weapon (including inherent pistols and Avsari plasma swords) will cause "stun

hits" when it hits a defending character (even mechanic), which are marked with a different (red) counter. Stun hits by themselves will not cause wounded or grievously wounded status, but if the sum of stun hits and normal hits equals or exceeds the character's END, it becomes "stunned" (i.e. passes out) and can no longer participate in the combat. 

At the end of the battle all stun hits are removed. If the defender won, the character rejoins its group and continues the game as usual; but if the attacker won, a stunned character would be captured. A stunned character may not disengage and will be captured if abandoned by its friends. The attacker cannot change the setting of his lasers once the melee has begun, and all of his units must have the same setting.

''c. Melee: ''

Character combat is called "melee

".  There are two types of melee: hand-to-hand (HtH) and ranged. The first type involves a really-close fight, enough to be able to use fists, knives, chairs, and such. If a weapon is defined as HtH only, it may only be used in this kind of combat.

Ranged combat implies a firefight at medium range with lasers blazing. It is still quite a close affair, ranging from 5 to 40 meters at most; don't think about trench-to-trench or building-to-building warfare. If a weapon is defined as ranged only, it can only be used in ranged melee.

Unless otherwise specified, melee with SO soldiers is ranged; with monsters and angry civilians it is hand-to-hand. Melee between groups of characters is whatever the attacker prefers. 

Every character is assumed to have an inherent laser pistol, which is the least effective of the hand guns and is already factored into the character's STR. Hand pistols (inherent or not) can be used in both HtH and ranged melee situations.

''d. Plasma Swords: ''

Avsari characters prefer to use their ceremonial weapon, the plasma sword

. This weapon is inherent to all Avsari

characters, and is already factored into the character's STR. Basically it is an HtH weapon, but it may be used even in ranged melee because it can deflect rays and blasts, and with skill it can even turn them back on the firer. Besides, standard Avsari tactics is to charge ahead after a round or two and start slashing away even if the combat began as ranged. (This does not change the ranged melee status of a combat; it is mentioned only for flavor). An Avsari character is assumed to never voluntarily discard or give away its plasma sword, even if a better weapon is available, and to acquire or build a new one as soon as possible if the sword is lost for any reason (just as regular characters recover their inherent laser pistol). Therefore, Avsari characters cannot use other weapons (including those of defensive type).

The plasma sword is an excellent defensive weapon, therefore anyone attacking an Avsari (even another Avsari) has a -1 STR modifier.

!!5.4 CHARACTER DAMAGE

'' SPECIFICS''

''a. Effects: ''

Characters (even mechanic) are said to be //wounded// when they reach damaged status. A wounded

character has its STR and COM halved (fru), its AGI and NAV reduced in one, and may not repair items or spaceships. 

Any character (even mechanic) who is one hit away from death is said to be //grievously wounded. // Such a character may not pilot a spaceship, attack during a melee or command military units, and receives a +2 drm for disengagement attempts. Furthermore, a grievously-wounded character cannot disengage unless there is a friendly non-grievously-wounded character present. A grievously-wounded character left alone on a battlefield with enemy characters or soldiers would be captured (a monster would probably kill it). 

Sometimes an event instructs the player to apply grievous wounds to a character. Simply place enough hits to leave it one hit away from death, regardless of previous hits (even if already grievously wounded). A character will never be killed directly by such a situation.

Exception: A character that has a basic END of two is not grievously wounded by one hit; it is merely wounded.

A grievously wounded character //must// drop out of the mission as soon as possible.

''b. Resting''

'': ''

An organic character may remove all its hits by resting; i.e., not going out on any mission and not piloting a spaceship during a whole friendly Missions phase, and not leading any military units during the Military Ops stage. Place a "Rest" marker upon the character's counter in the Teams Organization segment or in the Preliminary step. Characters (even minor or mechanic) may be sent to rest even if they don't need it, just to leave them out of a mission. 

Resting characters that are part of a team remain stacked with it until the Preliminary step; then they unstack and do not participate of the mission. 

A resting character may still be a passive passenger in a spaceship. It can board a team's ship when it takes off from the same planet; but when his comrades arrive at a new planet, the resting character must unstack from the team again. It can also be a passive passenger on starships if otherwise eligible. 

A character may be sent to rest as late as the Preliminary step, even if it had been assigned to a mission. After that, rest cannot be claimed even if a character drops off from a team. The "Rest" marker and the hits are removed in the Repairs phase at the end of the game turn.

Mechanic characters may not heal by resting but must be repaired. 

''c. Nature:''

The body will slowly heal minor injuries even if not subjected to special treatment. An organic character that currently has hits but is not in wounded status can remove one hit at the beginning of the Missions phase. 

!!5.5 PRISONERS

''a. General: ''

Several situations in the game may result in MaC's being captured. MiC's are never captured, but just removed from play. Generally, an enemy military unit or character(s) must be present in the same planet surface or orbit box at the moment that the situation arises, or capture will not be effective and the characters will remain free. The prisoners are immediately stacked with the enemy units and must thereafter move with their guards to wherever they go. Notice that prisoners will take up seats in a character spaceship. Prisoners may be transferred between units belonging to the captor that are occupying the same box (except the lost box), by shuttle between units in an orbit box, at the same instances in which the captor's characters can be moved. Prisoners may be interrogated and tortured by their guards using the PrI mission.

''b. Prisoners in Combat:''

If a group of characters guarding prisoners is involved in a melee, the prisoners are placed in the screened line, and at least one guarding character must be placed inactive in the screened line to watch over them. If the guarding side disengages, is eliminated or is captured, the prisoners are freed. They are also free if the guarding side fails to provide an inactive character to watch over them, and in this case they may even join the battle! However, they are considered to be unarmed, cannot fire in ranged melee, and have -2 STR. Furthermore, unarmed Avsari do not cause -1 STR to enemies. (All unarmed characters recover their full STR and are armed at the end of the melee). Basically, the guarding side must win if it wants to keep its prisoners.

If prisoners are in a spaceship when it is destroyed, the captor must let them try to use an escape pod (see 6.4.d). Any prisoner character that survives in an escape pod is essentially free, subject to the same rules as if it had survived from a friendly destroyed spaceship. However, unlike free characters who survive with a d6 roll of 4 or less, prisoners survive only on a die roll of 3 or less. 

If a prisoner is guarded by enemy ground units on a planet and all of them are destroyed, the prisoner escapes on a d6 roll of 3 or less. On a 4 or greater, the character was executed before friendly troops could reach him/her.

''c. Rescue: ''

There are other methods of rescuing prisoners that are not as blunt as those describe above. The Rescue and Escape missions may liberate captured characters on a planet surface, while Special Ops teams allow an attempt to rescue those in orbit inside a starship.

''d. Jail: ''

Random events sometimes result in characters ending up in jail

. Place a "Jail" marker upon the character's counter. Jailed characters are not prisoners of the enemy side; they are held by local authorities who ignore their true importance. Only MaC's can go to jail.

```
"Hey Sarge, take a load of the prisoner they brought in from the brawl at the //Purple Tobori Bull. // They say he cracked a couple of skulls over there. He just came out of laser stun, and claims he's a count or a duke or something."

"I tell you I am the Duke Pantaleon of Armes. The Crown Prince!"

The Sarge broke wind. "Oh yeah, and I'm the pimple on the Emperor's left buttock! Ha ha!"

You dare mock the Emperor my father? You will pay!! You will wish for death a thousand times before I'm over with you!!"

Yeah, yeah. Just go back to your cot and sleep it out, 'majesty'. Ha!"

A stream of invectives followed, but the attention of the soldiers was captured by an officer standing at the door. 

The captain. Ten-hut!" The man looked kind of sick. Like, all pale and sweaty. Perhaps he was about to throw up or something?

Finally the officer managed to half-swallow the lump in his throat and growl, "You drooling idiots! Liberate... His...  Imperial... Highness... At once!!!"
```

A character who is jailed in an enemy-controlled or enemy-occupied planet is under the danger of being recognized and turned over to forces of the opposition. The enemy player may try to "recognize" the character by rolling a 1 in a d10 during his Search phase. A separate die roll is made for each character, even if several are jailed together. If successful, the character becomes a prisoner if enemy units that can take it are present; otherwise the character remains in jail until some such unit arrives. Flip the jail counter over to the "recognized" side.

A character may get out of jail by:
<ul> <li>*Paying bail equal to 100 sc per character. It can be paid in the same phase in which the character fell in jail, or in any future Missions phase. Bail must be paid by a team (not necessarily the same of the jailed character) on the planet using an extrinsic activity step. 
<li>*A character who is jailed in a friendly-controlled or friendly-occupied planet will be released for free at the beginning of any future Missions phase if the player manages to roll 7 or less with a d10 (its superiors are notified of the situation and intervene). If several characters were jailed together, all are freed with the same die roll.
</ul> <ul> <li>*Using the Escape or Rescue missions.
<li>*Doing the time... At the beginning of any future Missions phase roll a d10, and on a 1 or 2 the character completed its sentence and is released. If several characters were jailed together, all are freed with the same die roll.
</ul> 

''e. Prisoner Freed: ''

If a player carelessly leaves a captured character counter in a box (Except the lost and off course boxes) not stacked with his units at the end of a segment, the prisoner is assumed to have escaped and is free (detected). If the escape occurred in an orbit box, the character would land on the planet via escape pod. Players should not take advantage of obviously accidental unstacking to claim this. 

''f. No Executions: ''

A player (even the Imperial) cannot 

kill a prisoner. If a player deliberately sends a prisoner into a clearly senseless and unjustified danger (for example, aboard a damaged sloop on a distance 12 hyperjump in the hope of the ship being lost and damaged, killing the character) the opponent may claim the prisoner's immediate liberation.
!!5.6 SOVEREIGNS

''a. General: ''

A number of special main characters are sovereigns of planets. Their cards are not included in the character decks for random drawing, but instead may appear as a result of a Stellar Event. Their counter is distinguished by having a light blue background on the middle band.

When first summoned into play, only the sovereign's white marker is used; it is placed upon the Coup box of the planet, removing any coup markers that are currently there. While the white sovereign marker is on the Coup box, no CdE missions are allowed on that planet. 

The other effect of this appearance is that the character is now available to be wooed by both sides in order to gain its support, or at least to discourage the sovereign from actively joining the opposition.

''b. Commitment: ''

A sovereign may be either uncommitted or committed. It may also be dethroned, but in that case the character ceases to be a sovereign and becomes a common MaC. A sovereign is considered uncommitted when it has appeared in the game by placing the white sovereign counter on the Coup box, but has not yet been activated by a player. Uncommitted sovereigns may not be assassinated.

Every sovereign has a "commitment level" that goes from   -4 to +4. The current level is noted by placing an appropriate marker on top (or at one side) of the white sovereign marker. The initial level existent when the character first appears is defined on its card and counter. Players may modify a sovereign's commitment level using the Influence Sovereign mission.

If a sovereign reaches a +4 level, it commits to the Rebels, and if level -4 is reached, it commits to the Empire. Once committed, sovereigns can no longer be influenced.

Every sovereign has a "commitment level range" defined on its card and marker, which reflects its sympathies and how far it will go for one side or the other. The net effect of this limitation is usually that a given ruler may only be called to commitment by one side, although there are a few opportunistic sovereigns who may join either side. A sovereign that may only commit to the Empire is considered pro-Imperial, and one that may only commit to the Rebels is pro-Rebel. The wavering sovereigns are considered potentially pro-Rebel.

Nominally, every planet governor is a loyal vassal of his Imperial Majesty Pantaleon IX. When a sovereign commits to the Empire it means that it will get involved in the war above and beyond the call of duty. A Rebel commitment, on the other hand, is open treason in the eyes of the Empire.

Committed Rebel sovereigns will usually be on the run, especially in the early game.

''c. General Effects of Commitment:''

When a sovereign commits to a side, the planet's unrest level is modified two levels in favor of that side. If this would take the unrest level above +3, rebellion does occur. In that case, the level of success in the InS mission would be treated as the level of a SpR mission for effects of the rebellion. 

The character's counter is placed on the planet surface along with its "own" unit (as defined on the character's card). The white marker still remains on the Coup box, and the +/- 4 commitment level of a committed sovereign continues to apply for modifying the FASC of Propaganda & Diplomacy missions, and for tension and victory determination purposes.

''d. Sovereign in State: ''

A committed sovereign is considered to be "in state", and there are limitations on its use. A sovereign may go on missions quite normally, even by itself. However, more usually this will involve a team fetching the sovereign. In the latter case it is assumed to go incognito and is treated as any other MaC. 

Rulers are often recalled back to their planet for one duty or another. In the Preliminary step of the team's Action segment, a random event may indicate that they must take the sovereign back to its home world.  The event will also indicate how long the ruler must remain on that planet unavailable for missions (it may be as little as a single Action step, or as long as 6 game turns!). An "Unavailable" marker is placed on the character's counter, and a note is made about the date when it will be available again.

A sovereign is dispensed from returning to the home world if this is under enemy occupation or blockade. If that is the case, the recall may be ignored and the character may go on playing normally.

Sovereigns in state may not be named to lead military units except on their own planet (including the orbit box). They cannot be transported away from their home planet in a starship unless a general evacuation of all military forces therein has been declared. If for some reason the player transfers a sovereign to a military unit, it must carry the character as soon as possible back to its planet (unless it is enemy-occupied or under blockade). Notable exception: The Emperor, Pantaleon IX, can leave Earth aboard the //Imperial Will // (subject to Imperial Strategic Restrictions).

Sovereigns in state cannot go to jail on their own planet. Ignore any event that would indicate so.

Committed sovereigns are considered to have a NAV of zero (they expect to be carried around). They gain their printed NAV value only if they are dethroned.

Essentially, it is intended that a sovereign should only leave its planet incognito on a character spaceship, with the aim to perform missions.

Many a player might consider that it's not worth the bother to use a sovereign on missions, due to all this recalling business. Only you, viewing the big picture, can be the judge of that. If you don't expect too much from them and acknowledge the fact that they are not supposed to go very far away from their home or for too long, sovereigns can be valuable assets. 

On the short run, they may even be the decisive factor for a mission's success. Besides, even by just sitting on their planet they give you advantages. They can diplomaticize their own planet, or raise money, protected by the palace guards.

''e. Dethroned Sovereign: ''

Sovereigns become dethroned under the following circumstances:
<ul> <li>*If a committed Imperial sovereign's planet goes into rebellion, it has been toppled from power and is dethroned, immediately becoming a common MaC, and remains in the game. 
<li>*If an uncommitted pro-Imperial sovereign's planet goes into rebellion, it would be considered to have been toppled and dethroned. Shuffle its card into the Imperial characters deck for possible recruitment in the future via random event (as a common MaC). 
<li>*If a pro-Imperial sovereign appears when its planet is already in rebellion or Rebel control, it would be considered to have been toppled and dethroned. Shuffle its card into the Imperial characters deck for possible recruitment in the future via random event (as a common MaC).
<li>*If a sovereign commits for the Rebels but its planet continues to be in Imperial control (or at least ownership) after that, the character is in open defiance of his Imperial Majesty. It is dethroned, declared a Rebel and a traitor, and becomes a common MaC. 
<li>*If a sovereign commits for the Rebels and the planet is in rebellion (or goes into rebellion as part of the same event), it would be dethroned if the Imperial player manages to militarily occupy the planet without opposition at the end of a game turn, even if it remains in rebellion. As long as the planet continues to be contested, the character is still sovereign. If a planet progresses into Concordance before the Imperial has been able to occupy the planet uncontested, the sovereign cannot be dethroned for the rest of the game.
</ul> 

Whenever a sovereign is dethroned (or killed), permanently remove the white sovereign marker and the commitment marker from the Coup box. The character may still be claiming to be the rightful ruler, and many people may believe it, so it continues to be nobility on the home planet. However, for game purposes the character is in exile and forever becomes a plain main character like any other; it is no longer a sovereign.

It may be asked why a character can't recover the throne it lost. There are three reasons: 1. - The rules for sovereigns are already complex enough and provisions for throne recovering would only muddle things. 2. - The obvious trigger for throne recovery would be if the planet became friendly-controlled. But once you have a free MaC you wouldn't want it to return to the limitations of a sovereign, so some could argue that in game terms you are being punished for achieving something good (planet control). 3. - During a revolutionary war things are not so crystal clear regarding sovereignty claims. 

//"Your Royal Highness, I'm so honored by your call... Ah, no. Of course the Concordance acknowledges your claim to the throne of Ragnar, but the High Command believes that for the moment it is in everybody's best interest that the planet remain under a military governor. No, your Highness. I assure you that it is nothing personal. Besides, there is the matter of the plebiscite..." //

''f. Special Rebel Commitment: ''

If a (potentially) pro-Rebel sovereign appears in the game and its planet is already in rebellion or Rebel control, the character automatically commits for the rebellion. 

If an uncommitted (potentially) pro-Rebel sovereign exists on a planet when rebellion occurs, the character automatically commits for the rebellion. 

''g. Retinue:''

When a sovereign is in public office on its home planet he/she is accompanied by a retinue, which includes aides, servants, advisors, sycophants, etc. Furthermore, the royal is constantly guarded by a platoon of palace guards.

The moment that the sovereign leaves the home planet's surface the retinue

is immediately lost, but not necessarily the detection. (Exception: the Emperor has a retinue that may travel around with him). The retinue is immediately recovered upon return to the planet surface. 

While the sovereign

is with its retinue, the following effects apply:
<ul> <li>*It is always detected. 
<li>*Its team cannot perform missions Abd, Asn, Hid, Res, Sab or Ste, as these imply covert action that would be a bit difficult given the circumstances.
<li>*If involved in melee, it always has Palace Guard escorts. The guards that accompany the character are represented in melee by four soldiers which are treated as any MiC, except that once the battle is over you don't need to keep track of a guardsman's wounds or heal him. The next time the sovereign is in need, it will again have four healthy palace guardsmen at his side. Replacements are assumed to be readily available. The guardsmen are not part of the team in any non-combat situations (they are not counted when determining who receives a wound as per random event 01, for example). The soldiers are of the type that the "sovereign's own" unit would generate on the Patrol Chart; for example, Pantaleon IX's Imperial Guard would give him commando soldiers, while A. Scaldseke's Red Guards would get an escort of Line soldiers.
<li>*A -2 FASC modifier (-4 for the Emperor) applies for Abd and Asn missions against the sovereign. 
	  </ul> 

Whenever it has no retinue, a sovereign plays as any other  MaC.

''h. Assassination: ''

An uncommitted sovereign may not be assassinated or abducted. Once committed, it is a target as anyone else. However, if the attempt occurs on the home planet while surrounded  by  the  palace guard,  a -2 drm to FASC applies (- 4 against the Emperor). 

''i. The Emperor: ''

The Emperor

Pantaleon IX can appear in the game as any other sovereign. However, he has a number of peculiar rules applicable to him or his "own" units.

__Retinue:__

Unlike the lesser sovereigns, the Emperor can travel around with his retinue, as long as he uses only capital ships to travel. Place a "Retinue" marker under his counter. The moment that Pantaleon IX boards a character spaceship he is assumed to be traveling 'incognito'. His retinue is immediately lost (but not the detection). The same if His Imperial Majesty boards any light starship (i.e. not a capital ship). The Emperor's

retinue is also lost at the end of any game turn that he is stranded on a Rebel-blockaded planet (other than a not-Rebel-occupied nor Rebel-controlled Earth 111). 

__The Imperial Will:__

The Emperor has a personal cruiser, the //Imperial Will,// which is placed for free in the orbit box of Earth 111 when Pantaleon IX first commits to the Empire. The //Imperial Will// is a heavy cruiser modified to accommodate the court and the Emperor's pleasures. Some weapons have been removed; also, the crew is not in ship-shape condition, being formed mostly of political appointees who see service on the pleasure boat as a way either to advance in the court, or to avoid harsher conditions on regular Navy starships. Therefore its STR is less than that of other heavy cruisers.

The //Imperial Will// can be moved freely (subject to Imperial Strategic Restrictions) only if the Emperor is inside. If he isn't, it can only be moved to return to Earth 111, or to move towards Pantaleon's current location (regardless of the planet's tension level). Pantaleon can leave Earth aboard the //Imperial Will// to go elsewhere (exception to the general rule regarding sovereigns in state).

If the //Will// is available, the Emperor and his retinue must board it in preference to any other starship present (unless it is damaged).

Aside from the limitations above, the special cruiser is treated as any other capital ship. It can be rebuilt if lost (at the cost of a heavy cruiser).

__The Imperial Guard:__

The Emperor's own unit is the Imperial Guards legion (6-12), which appears on the surface of Earth 111 when Pantaleon IX commits to the Empire. The old Imperial Guard

is the Emperor's legion and it is beyond doubt the unit with the greatest tradition in the galaxy. The cream of the Imperial army, with extraordinary &eacute;lan and a reputation of invincibility, the Guards possess heavy body armor, excellent equipment and many armored fighting vehicles adapted to normal and special environs (tanks, mechs, surface skimmers, submarines, aircraft, etc.). Therefore they have the best possible STR and may ignore peculiar environmental effects. Notice that unlike other units, the STR on the damaged side is more than half that on the front. Beyond that, the Guard has +1 STR if fighting on Earth 111 (if not Rebel-controlled). As any other sovereign's own unit, the Guard is unique and irreplaceable. If destroyed it cannot be rebuilt.

__Succession:__

If Pantaleon IX dies (or is captured), Mas Pantaleon, Duke of Armes, becomes Emperor (or regent, in case of capture). He would be treated as a sovereign (with possible recall to Earth 111 by random event) and would gain all the attributes that Pantaleon IX had (Imperial Liege, Imperial Will, Retinue, etc.) while keeping his own attributes as well. Exception: The modifiers for the InS mission are not cumulative; he would use only +1.

Should Pantaleon X die too, it is assumed that his infant brother Napoleon XIII rises to the throne under Lord Anaxim's regency, but he is not represented the game (and Anaxim does not gain any special attributes).

''EXAMPLE OF MELEE COMBAT''

It is the Rebel Missions phase, and a team formed by Mon Bulma, Lalejo Chan, Illian and a Medical Droid companion is performing a P & D mission. A random event calls for an attack by an enemy patrol of four elite soldiers! 

The character strengths are as follows: Mon Bulma, STR 6; Lalejo Chan, STR 3 (he has a thermal bayonet but that is no use in the ranged melee against the soldiers); Illian, STR 2, (+1 due to a blaster pistol); and the Medical Droid companion cannot attack.

Both sides roll for surprise, but the results of 5 and 7 indicate that neither side is surprised.

The Rebel player decides to put all three MaC's in the front line and the droid behind in the screened line (it is a valuable unit, and it can't fight anyway).

The compared STR of the opponents is 12 vs. 12. The Rebel player is feeling lucky and he wants to avoid the combat, so he announces a Hasty disengagement. He needs a 5 or less with a d10 for the front line units to flee, and a 7 or less for the droid. However, a 9 is rolled, so the Rebels

fail to disengage and furthermore they will have a -1 to their STR during this combat round.

The soldiers are assigned to their targets. Being multiple SO, they must be distributed as evenly as possible, with odd units being randomly assigned. The Rebel continues to have bad luck, as the odd soldier falls upon Illian, the weakest character.

The attackers roll dice first, although the defenders will get to fire no matter what damage they receive. 

A STR=3 attack rolled against Illian from the first soldier result in 2d6=8, for one hit. However, Illian manages to roll a 1 with a d6. This is less than or equal to her avoidance factor, and she dodges the blow. The second soldier rolls a 4, however, for a total of three hits, enough to wound her. The second avoidance d6 is a 5, so she gets the blow.

A STR=2 attack against Bulma (the plasma sword reduces the soldier's STR in one) results in a 4; two hits. The avoidance d6 is a 4, and Bulma fails to avoid the hits.

The last soldier's attack against Chan is a 6, for one hit. He shrugs the blow away with a 2 in his avoidance die roll, however.

The team fires back. Their STR is reduced in one due to the botched hasty retreat.  Illian splits her attacks, with a STR=1 attack against each of her attackers; and rolls 7 and 11 for no effect. Bulma rolls under column 5, getting a 2d6=4. She inflicts 5 hits on the soldier confronting her, causing it grievous wounds. Finally, Chan rolls a 9 and causes 1 hit. Since Illian is badly wounded and could be killed by a single impact, the Rebel decides to move her back to the screened line, with the medical droid. The robot cannot heal her at this moment because that can only be done in an extrinsic activity Action step (11.2.f). The soldiers are redistributed, and as luck would have it only the soldier with one hit is assigned to Lalejo Chan. The grievously wounded soldier cannot fight anymore, and since he can't be captured or have any further effect on play, he is removed.

Burned by the previous disengagement attempt, the player decides to take it easy and announces a Prepared disengagement. This implies fighting normally this round.

The combat dice rolls are:

Against Bulma: First soldier STR=2 (5) two hits; avoidance d6=2, avoids the blow. Second soldier STR=2 (10) misses.

Against Chan: STR=3 (3) four hits, avoidance d6=6. Chan gets 4 hits, and is wounded.
Bulma STR=3 against first soldier: (10), misses. Second: (6), one hit.

Chan against soldier: (7). One hit which is added to the hit it already had.

Things are going really badly for the Rebel. Desperate action must be taken, and the player decides to move the Medical Droid up to the front line. The robot can't fight, but it will attract the attention of one soldier and give the team some breathing space in case the disengagement attempt fails and they have to fight another round. Chan is now in real danger of death from a single blow, but the Rebel believes he can't afford to leave him in the screened line.
The disengagement is resolved now. The compared strengths are: Imperial attacker 9, Rebel defender 8; row "+1 to +3" of the Disengagement table would normally be used. However, due to the Prepared disengagement, the row three levels above that is used (-4 to -6) and furthermore, a  -1 drm applies due to the previous (hasty) attempt.  A 7 or less is needed, and the combat ends as a d10 roll of 6 allows the Rebels to run away. It was very close, though.

!''6. CHARACTER SPACESHIPS''

Character spaceships are small private vehicles that characters use to get around. They are smaller and weaker than even the puniest starship, and therefore cannot stand up to starships in combat. However, they have advantages over the bumbling ships-of-war. They can use stealth or pass for harmless civilian vehicles, allowing their occupants to engage in covert operations.

!!6.1 INTRODUCTION

''a. General: ''

Each character spaceship

(ChS) is represented in the game by a card and a counter, and they are considered to be units.

''b. Spaceship Ratings: ''

each character spaceship has the following ratings:

__Strength (STR)__

: Same as for other unit types.

__Endurance (END):__ Same as for other unit types.

__Maneuverability (MNV)__

: Used as a quantification of the ship's nimbleness when undergoing tracking by GDN's and starships, or in dogfights against starfighters.

__Computer (CMP)__

: Defines the astronavigation computer

's quality as poor (+1 to hyperjump distance), average (normal effect), good (-1 to hyperjump distance) and outstanding (-2 to hyperjump distance). On the ChS counters, the CMP quality is identified by a color background under the ship's MNV value: Poor, yellow; average, green; good, blue; and outstanding, purple.

__Capacity (CAP)__

: How many passengers

may travel in the spaceship, including the pilot. Minor characters going along with the main characters, such as companions or civilians, do occupy seats in spaceships.

__Special__

: Like characters, spaceships may have "special talents".

''c. Ownership''

'': ''

Spaceships may be assigned and reassigned to main characters (never to MiC's). The character who currently owns the spaceship is the pilot. If the owner of a character spaceship is killed or captured, another MaC or a ground military unit on the same planet could immediately claim possession of it.

Military units may take possession of an empty character spaceship. Starships can tow it around wherever they go, and ground units can guard it while on a planet surface. They can even try to repair it.

!!6.2 PILOTS

''a. Pilot's Navigation Rating:''

The pilot

's NAV rating may modify the MNV rating of a ChS, as given on the Pilot's Effects on Maneuver chart. Also, a pilot with a NAV rating of 4+ will give a +1 modifier to the STR of its ChS.

''b. Inexperienced Pilot: ''

A character with a NAV rating of 1 can barely fly. A d10 roll must be made every time that a spaceship with such a pilot

takes off, and another when it lands. A '10' results in a crash. The spaceship is destroyed and each passenger suffers d10-1 hits. A character with a NAV rating of 0 can never pilot a spaceship. 

!!6.3 THE TRACKING ROUTINE 

''a. When: ''

The tracking routine

may take place when a ChS moves from surface to orbit of a planet (or vice versa) where an enemy GDN exists, if the tension level is greater than zero. It may also occur when it enters an orbit box occupied by enemy starships, and when an already detected spaceship begins an Action step in an orbit box occupied by enemy starships and decides not to move and remain there. Therefore, a ChS could suffer the tracking routine up to twice when leaving or arriving at a planet.

''b. Procedure: ''

A d10 is rolled on the Tracking Table. If the roll is less than or equal to the value shown for the ship's MNV value (modified by the pilot's NAV), it has been detected (if not detected already), identified as a "bandit" (enemy) and tracked. Drm's may apply due to different circumstances. A die roll of '1' prior to modification is always successful, regardless of unfavorable modifiers. Transports do contribute to tracking.

''c. Effects of Tracking: ''

If the tracker is a GDN, it may rake the spaceship (see 9.2.b). If the tracker is one or more starships, roll a d10: 

''1-4''

__Raking Attack__

: The ChS gets raked by a randomly determined starship 

(the Moloch, transports, damaged starships and heavy starfighters are not eligible in the selection). It is attacked with that starship's STR once and cannot fire back; after that it disengages automatically. 

''5-8''

__Starfighter Attack__

: The ChS is attacked by a flight of starfighters; see 6.4 below.

''9-10 ''

__Combo Attack__

: The ChS gets raked, and then it also gets jumped by starfighters.

Note: If the die roll indicates a mode of attack that is not available given the composition of the starship stack, but that force could conceivably engage the spaceship using the other mode, then it does.

''d. Civilian Ships''

'': ''

Due to their lack of weapons and obvious nature, character spaceships defined as "civilian" may try to pass as innocent vehicles in legitimate business when tracked and hailed, even if previously detected. When it is tracked by the enemy, the pilot of a civilian spaceship may bluff his way past the defenses by rolling more than the planet's current tension level with a d6. A +1 drm applies if the character's INT is 4+. If successful, the spaceship is not tracked. 

!!6.4 DOGFIGHT SPECIFICS

''a. General: ''

Dogfights 

occur only when a character spaceship is successfully tracked by enemy starships and a starfighter attack is rolled, provided that at least one of the following is present: An undamaged starship that has a Combat Space Patrol value of one or more, or a heavy starfighter. (Starships with no CSP value can still track; they just can't send out fighters).

''b. Attacker: ''

The attacker is a flight of (light) starfighters, or one heavy starfighter (owner's choice). A heavy starfighter must be present in order to opt for the latter, of course. 

For a light starfighter flight, first calculate the fleet's Combat Space Patrol value by adding up the value of each undamaged starship present (as given in the Starfighter CSP Values chart). With that value, roll a d10 on the Flight Size table to see how many starfighters (STR/END 1/1) attack the character spaceship.

For a heavy starfighter attack, use the dogfight-type heavy starfighter counter (with gray background and 3/6 values). Hits sustained by the heavy starfighter in the dogfight, short of destruction, are not kept track of once it returns to its "starship" version. However, if the fighter is destroyed in the dogfight, the starship-type heavy starfighter counter is eliminated from play as well.

''c. Disengaging: ''

Unlike

other types of combat, in a dogfight it is not the character spaceship's STR but its MNV (modified by the pilot's NAV) that is subtracted from the combined STR of the attackers to arrive at a differential for a disengagement attempt. 

After disengagement succeeds, the ship may continue its trip to wherever it was going. If the announced move of a character spaceship contemplated leaving the orbit box by impulse movement (to land on the planet for instance), the attempt would be an impulse disengagement (i.e., normal situation). However, if the announced destination of the spaceship implied a hyperjump from that orbit box, a &ndash;2 drm applies to the Disengagement table for a warp disengagement.

This is not considered an emergency hyperjump, because the jump is already planned and programmed into the ship's astronavigation computer. If the spaceship had planned to end movement in the orbit box it may do so after disengaging (hiding behind an asteroid perhaps), but would remain detected.

If the going is really tough in a situation that implies an impulse disengagement, the player may cancel the flight plan he had announced before and attempt a warp disengagement.  This unplanned jump would be considered an emergency hyperjump

and the ship must be moved to the lost box of the same star system without need of rolling for the jump.

A damaged ChS may be unable to hyperjump. Every time it tries it (after the successful disengagement roll), a d6 is rolled and a 5 or 6 indicate that it cannot jump for the rest of that combat. It must remain in the battle for that round and may attempt impulse disengagement in later rounds.

''d. Survival''

'': ''

Every spaceship carries enough escape pods

for the crew and passengers (Imperial decree 552.4509, paragraph E). If a character spaceship is destroyed in an orbit box, every character must roll for survival. A 4 or less in a d6 means that the pod ejected successfully. Exception: Prisoners

trying to escape a destroyed spaceship only survive by rolling 3 or less. 

If the escape occurs in an orbit box and there are any friendly starships or character spaceships there, they pick up the pods. However, if there are only enemy starships in the orbit box, the characters would be captured. In the extremely rare case that escape pods find themselves in an empty orbit box they would land on the planet (detected).

Characters cannot refuse to use the escape pods, even if capture

is certain (survival instinct takes over).

If a ChS is destroyed during a GDN attack, it makes a crash landing

on the planet. The ship is lost and each character suffers d10-1 hits. 

!!6.5 CHARACTER SPACESHIP DAMAGE SPECIFICS

''a. Effects: ''

In addition to the standard effects of damage, a damaged

character spaceship may be unable to hyperjump. Every time such a unit attempts to jump a d6 is rolled; a 5 or 6 prevents it from moving and it cannot use hyperjumping for the rest of that Action segment (unless it is repaired in the interim). In a dogfight, it could attempt impulse disengagement in subsequent rounds. In a non-combat move, it would have to remain in the orbit box it currently occupies, although it could move (by impulse) in subsequent steps.

Damaged character spaceships that land on a planet may be unable to take off. Every time such a unit attempts to fly a d6 is rolled; a 5 or 6 prevents it from moving and it must remain in place for the rest of that Action segment (unless it is repaired in the interim).

A ChS that is one hit away from destruction is considered to be //mangled// . A mangled spaceship

cannot even attempt hyperjumping. When it lands, a crash d10 roll must be made; on a result of 10 the ship crashes and is destroyed, with every passenger suffering d10-1 hits. A mangled landed spaceship cannot even attempt to take off.

''b. Repair: ''

A 

character may attempt to remove a spaceship's hits during an extrinsic activity Action step, but only if it is landed on a planet. The character need not be the pilot, but must be in the same team. If the character rolls its Navigation rating or less with a d10, the ship gets the same number that was rolled of hits repaired (and any malfunction counter is removed). For every 20 credits spent on "spare parts" a +1 modifier to the NAV applies (for repair purposes only). The maximum "spare parts" modifier is +3, but the modifier can be kept for a subsequent attempt if the first one fails.

A military unit currently in possession of a damaged spaceship may also attempt to repair

it with its standard Navigation rating of 4, and unlike a character, it may do so in space while it has it in tow. (No spare parts available though). Repair by military units occurs at the beginning of the Starship Movement segment.

''EXAMPLE OF TRACKING AND DOGFIGHT COMBAT''

A detected Sirius 7000 ChS piloted by the Rebel character Onioc (with Brent Smith as a passenger) flies out of the planet Lipe 552. An Imperial star cruiser, a light cruiser and a sloop are in orbit. The Sirius' MNV is 2, modified in +1 due to Onioc's NAV of 4. The basic number that the Imperial needs on a d10 to track the Rebel ship is 6. A +2 drm applies due to the number of starships (3), but that cancels out with the -2 for being detected. 

The Imperial rolls a 3, so the spaceship is tracked. A subsequent d10 of 9 indicates a combo attack; the ChS will

get raked by a RaS starship, and then it will be chased by starfighters. The light cruiser is randomly selected.

The cruiser rolls (STR=3) against the Sirius, getting a 9. The spaceship suffers one hit. 

Having run the gantlet of the starships, now it gets jumped by the fighters. The CSP value of the Imperial starships is eight (six for the star cruiser and two for the light cruiser). Under column 7-9 of the Flight Size table, a d10 roll of 9 indicates that four light starfighters attack.

Surprise dice rolls of 10 and 6 indicate that neither side is surprised. The situation looks grim; the Rebel decides that he will weather one turn of enemy fire, and announces a Prepared disengagement. This implies to fight normally this round.

The attack dice rolls of the fighters (STR=1) are 5, 6, 2, 12... Four hits! The Sirius returns fire with its STR of 1 (0 +1 for Onioc's NAV). The Rebel gets lucky and rolls a 4; one starfighter clumsily crossed in front of the Sirius' light laser and got blown to smithereens!

The spaceship is now mangled, and it cannot hyperjump. It must attempt an impulse disengagement. The compared strengths are: Imperial +3, Rebel MNV 1+1=2. Row "+1 to +3" would normally be used, but since this is a Prepared disengagement, three rows are added and the "-4 to -6" row applies. A 7 or less is needed, and with a d10 roll of 2 the rattling Sirius manages to avoid its pursuers, and the Rebel decides to fly it to the orbit box of nearby Marlowe 551. Using another Action step, he lands it on the planet. A crash d10 roll must be made; however, with a roll of 8 Onioc makes a smooth landing.

!''7. STARSHIPS''

The armored fist of the Empire is the Imperial Navy. Much of the power of the Imperial system lies in the fact that no one else is allowed to have ships of war. The Rebels have no starships at start, but as planets begin to revolt they will be able to start forming a tiny fleet. At first, perhaps their ships represent converted civilian freighters or salvaged abandoned Imperial vessels. However, Rebel technicians already have the plans and the know-how to build equivalents of the models in the Imperial fleet... If only they had the resources. It is up to the Rebel player to provide them!
!!7.1 INTRODUCTION

''a. General: ''

Spaceships that have been built with military action in mind are called starships in the game. Starships may be of two kinds: Capital ships are huge and can only be built and maintained in space. Light starships are smaller and/or have the special thrusters and other characteristics that allow them to land.

''b. Capital Ships:''

__Moloch:__ See 21.1.

__Battlestars, Dreadnought class:__

These are formidable Imperial warships, but they consume so many men and materials that they are not a profitable investment (but the prestige, man, the prestige!). Only two prototypes, the //Dreadnought// and the //Pantaleon III, // can be launched, and they cannot be rebuilt if lost.

__Battlestars, Starcruisers and Heavy Cruisers:__

These are the meat of starfleets, capital starships of varying strengths depending on the caliber of the weapons they carry and the toughness of their shields and armor. 

''c. Light Starships''

'':''

__Light Cruisers__

: These are the workhorses of both navies, and command a lot of respect in the early game when the protagonists of most battles are the midgets. The strongest ship that can still land on a planet surface, which is an advantage for escort duties, and makes it quite useful as an ad-hoc taxi for characters. 

__Destroyers, Frigates and Corvettes:__ In spite of their apparent weakness, these small ships are important. Their ability to land on a planet allows them to escort transports as they move past GDN's. Also, they make numbers, needed for effective blockades. Destroyers and frigates are compact but well-armed (for their size) men-o'-war. Corvettes are small attack spaceships, fast and agile, with crews not exceeding 5 or 6 men. Their firepower of 2 comes from the fact that they carry a couple of proton torpedoes.

__Sloops:__

The Imperial sloop represents a small lightly-armed vessel intended primarily for police and customs duties, but if necessary sloops are incorporated into Imperial fleets as ad-hoc escorts.

__Heavy Starfighters__

: These are not really starships, but the Rebels frequently use them as a poor man's solution to their scarcity of warships, in escort and attack duties. The most common model is the Viper Mark II. Heavy starfighters are less agile than their lighter brethren carried by starships, but they are much more powerful, since they have twin fixed-mount laser cannon and may even carry one small proton torpedo under the fuselage. In addition, they have shields and a warp drive, both of which light starfighters

lack. The counter represents a flight of two heavy starfighters.

__Transports:__ Every ground unit (except garrisons) has an organic transport

assigned to it. As long as the ground unit is on a planet surface, the transport counter disappears from the game and cannot be harmed; it is completely ignored. Even if the transport is in damaged status or has hits, it is removed and the players don't need to keep track of it. The next time that the ground unit wishes to fly away, a brand-new transport immediately appears. However, transports that remain in space do keep their hits and damage (unless removed by normal means, 7.5.b). 

During Space Combat the ground unit is placed under its transport and cannot be inspected by the enemy player (useful to keep an enemy guessing if ground units of different value are present). If a transport is attacked in flight, the ground unit it is carrying suffers the same number of hits as the ship.

''d. Starfleets: ''

Players may organize their starships in space by placing them in a starfleet

. They are picked up from the mapboard and placed in the corresponding (Imperial or Rebel) Display box, and that starfleet's counter is placed on the map. There is no upper limit to the number of starships that may be in a starfleet, but the minimum is two.  A single starship would have to be left alone in the Orbit box, in plain view. 

Starships that are built over a planet may be placed directly into the starfleet display if there already is a starfleet counter in orbit.

Characters and character spaceships that are stacked with starships may also be placed out of view in the display.

Usually only one starfleet counter is needed per orbit box, but during play it may be convenient or necessary to divide the ships into two or more separate starfleets. The number of starfleets in the countermix (27 Imperial, 23 Rebel) is a limit; units in excess of that would be placed in plain view. Starships landed on planets may not be organized into starfleets and are always in plain view.

The contents of starfleets cannot be inspected by the opponent unless he has a friendly ship in the same orbit box (therefore character spaceships and small starships can double as scouts, albeit at a risk). The starfleet display is covered with a box lid so the enemy cannot see it.
!!7.2 BLOCKADE

''a. General: ''

At the end of his Space Combat segment, the phasing player may declare "blockade

" over a planet that has a tension level of five or more (exception: The Rebel player may blockade any planet regardless of tension), provided that he has at least five undamaged, non-transport, non-Moloch starships in the planet's Orbit box organized into a starfleet. The size of the ship does not matter; five sloops could effect a blockade. Invert the starfleet counter to its "Blockade" side.

A blockaded planet is cut off. It cannot be taxed and no units can be built or repaired there during the R&B phase (but they still can appear as the result of a rebellion). The planet can still be under the blockaded player's control if it otherwise qualifies. 

If tensions allow, a player may form a defensive blockade around a friendly-controlled planet. Obviously, in this case the blockade would not affect his own taxation and builds.

A blockading fleet is better for interception and tracking, but in Space Combat it is always considered to be automatically surprised. This is due to its dispersal, which is disadvantageous for battle.

Like the seaports of old, planets in a stellar empire are very vulnerable to blockade--enemy ships covering all approaches and impeding movement of friendly vessels in and out. However, blockading a spherical planet presents special challenges. A single ship would not be very effective; it would have to orbit round the planet and hope to catch any blockade-runners by chance. Two ships can cover the whole planet by exerting surveillance on a hemisphere each. It is still easy for runners to slip past along the borders of the hemispheres. Three ships could triangulate the planet along the equator. They are better poised to intercept but the poles are still leaky. The ideal minimum is five forming a diamond; three along the equator and one above each pole.

!!7.3 SPACE COMBAT

'' SPECIFICS''

''a. Interception: ''

Whenever starships try to move in the Starship Movement segment from a planet surface through the planet's orbit box to another planet; or when starships coming from another planet try to move through the planet's orbit box and land directly on the surface, enemy starships in the orbit box may attempt interception

. Interception does not apply when enemy starships arrive at the orbit box and stop there for combat.

The gist of this rule is that interception may be attempted when enemy units are trying to //pass through// the orbit box and continue movement. Against enemies that arrive and stay looking for a fight, combat is resolved in the Space Combat segment.

Interception may also apply in other segments, such as Surface Combat, when a force is evacuating a planet surface and it has to pass through enemy starships in orbit. 

The Interception Table is consulted on the row corresponding to the number of ships in the intercepting force (not counting damaged ships, transports or the Moloch). The number listed or less must be rolled with a d10 for success. Notice that interception is automatically successful with a blockade.

If interception occurs, the intercepting force (no damaged ships, transports or Moloch included) attacks the moving force in an immediately resolved Space Combat (referred to as Interception Combat). The battle is resolved as any Space Combat, with the interceptor being the attacker, except that the moving player must announce disengagement (either variety) in the first, and in every subsequent, combat round. The combat is resolved only between the intercepting force and the moving units. The interceptor cannot be surprised (exception: blockade stance). Once disengagement is achieved (if at all) the surviving moving starships may continue their movement.

Note: The disengagement would be impulse for a starship trying to land on the planet or going to another same-system planet using impulse movement. It would be warp for a starship about to hyperjump to another star system. However, this warp disengagement would not be considered an emergency jump (as it is an already planned move programmed into the ship's astronavigation computer).

''b. Disengagement: ''

There are two modalities for disengagement 

attempts by starships: Impulse, using the ships' impulse drive, or warp, by a sudden hyperjump, leaving the enemy staring dumbly at the place where your ships were a second before. 

After an impulse disengagement, the ships must move to an orbit box of another planet in the same system (if it exists) or to the Off Course box, player's choice. (Exception: Moving units breaking off from Interception Combat already have an announced destination and they must go there). 

Note: Disengagement is an exceptional instance in which you can announce the off course box as a destination. In normal movement you can only direct units to planets.

A warp disengagement is considered an emergency hyperjump (exception: a warp disengagement from an Interception Combat is a normal hyperjump), and the unit(s) automatically end in the same system's lost box (exception: units warp-disengaging from Interception Combat go to their announced destination). Due to its surprising effects, a warp disengagement causes a &ndash;2 drm when resolving it. 

Damaged starships

may be unable to warp. If they roll 5 or 6 in a d6, the hyperjump fails and they remain in the battle. The die roll is made //after// having made the successful disengagement roll. They can only use impulse movement for the rest of the segment.

For disengagement attempts, the COM rating of the commanders of both sides is applied just as it is for combat (7.3.i), modifying the STR of friendly units and consequently affecting the calculation of the STR differential.

''c. Surprise: ''

A force that has a commander in Space Combat may add a modifier depending on its COM rating to its own force's surprise

dice roll, reducing the chances of surprise, but a dice roll of '2' ("snake eyes") is always a surprise regardless of modifications. The modifier is given below:

''SURPRISE MODIFIER''
<table width="319" cellpadding="14" cellspacing="0"> <col width="133"/>
 <col width="127"/>
 <tr valign="top"> |  ''COMMAND'' |  ''MODIFIER'' |
 |  0-2 |  0 |
 |  3-5 |  +1 |
 |  6+ |  +2 |

  ''d. Starfighter Squadrons: ''  At the beginning of a Space Combat both sides calculate their Combat Space Patrol value by adding up the value of each undamaged starship present (as given in the Starfighter CSP Values chart). For every four CSP factors (or residue greater than one), that side gets a (light) starfighter  squadron (STR 0, END 1). However, regardless of the CSP value, a side may never deploy more than 12 squadrons in a battle. Excessive squadrons may be kept in reserve (making a side note) and may enter as replacements at the end of a combat round in which the number of friendly squadrons was reduced below 12.  A squadron is analogous to a starship, except as defined below.   If a Space Combat is occurring over a planet that is friendly-controlled by a side, that side may add two starfighter squadrons to the fray, representing starfighters based on the surface. Conceivably, the planet owner can even send his two squadrons up against enemies in the Orbit box even if no Space Combat is otherwise occurring.   Starfighters squadrons that are killed in combat are automatically replenished after the battle, but a cost is incurred of 0.5 rp per squadron lost. This is immediately subtracted from the player's Resources track without need of waiting for the R&B phase (incurring in a negative debt if necessary). A player cannot refuse to replenish lost starfighter squadrons.   If their side is warp-disengaging, starfighter squadrons may only go along with the starships if these have a combined CSP that could possibly generate that number of squadrons (representing the capacity to carry those fighters). Otherwise, starfighters left without a carrier have to impulse-disengage. Once they do so they are removed from the map (it is assumed that they are picked up later by service carriers of their side, or land on a friendly planet).   Notice that because of their STR of zero, starfighter squadrons do not have an effect on the STR differential for disengagement attempts, and they cannot receive COM modifications to their STR.

''e. Heavy Starfighters: ''

Heavy starfighters

are units that share the characteristics of starships and fighters. On the one hand, they are considered light starships for purposes of tracking, blockade, GDN raking attacks and other game functions. On the other, once a Space Combat begins they are treated as fighters, although they do have some important differences with light starfighter squadrons. 

Destroyed heavy starfighters are not replenished, but must be rebuilt as any other starship.

''f. Starfighters (Light and Heavy) in Space Combat: ''

Whenever both sides have starfighter squadrons and/or heavy starfighters, these must first be matched against each other in at least a 1-to-1 basis. Matched fighters are said to be //engaged// . Engaged starfighters fight only each other and have no effect on starships in the battle. Their fighting is resolved practically as a secondary, separate battle.

If a side has squadrons/heavy starfighters in excess of those needed to match the opposing fighters, they may either be used to help the already engaged starfighters against the enemy starfighters (becoming engaged as well), or they are free to be used to attack starships.   

Starfighters (both kinds) fire at starships normally using their STR of 0 or 1. However, starships do not fire back at them using their STR. Instead, starships are assumed to defend from fighters that are bouncing them with light laser cannon mounted in pivotable turrets ("flak"). Every starship has a flak factor which is equal to, but separated from, its basic STR. It is additional to the unit's STR that can be used against starships. A starship fires against all starfighters that are attacking it once using its flak factor, rolling 2d6 and using the Flak Table. The result obtained is the number of attacking starfighter squadrons/heavy starfighters destroyed. The starship owner can choose which fighters to eliminate.

Example: Four light starfighter squadrons and a heavy starfighter attack a light cruiser. The flak factor of the cruiser is equal to its STR (3), so it can roll under column 3 of the Flak table against the attacking fighters, aside from being able to use its STR normally against other starships in the same combat round. 

A starship (defender or attacker) usually may not fire flak at an enemy starfighter squadron/heavy starfighter unless that unit has been assigned by the opponent to attack it in the first place. However, starships that are free from attacks of any kind (i.e., from enemy starships and/or from fighters) can give their flak support to another friendly starship that is being attacked by enemy fighters. 

Unless it is in the screened line, every unengaged starfighter must be assigned a target. 

Light starfighter squadrons fire at other fighters of both kinds normally, using their STR of '0'. However, heavy starfighters do not use their STR against light starfighters. Instead, they use their flak factor of '1'.

Although it might kill a light starfighter with its forward-firing guns, the less agile heavy starfighter probably will be relying more on speed and its rear gunner's repeater gun, therefore it defends with "flak". The chances for those odd kills using the forward guns are assumed to be integrated into the flak dice roll.

If all that remains on the front line of a side is unengaged light starfighter squadrons, or engaged fighters of both kinds, the other side may claim a breakthrough and attack the screened line. However, an unengaged heavy starfighter does count as a screening unit. 

''g. Massive Shields:''

The hulls and 

shields of battlestars (including those of Dreadnought class) and the Moloch are so massive that the medium laser guns of light starships sometimes fail to scathe them. Whenever a light starship fires at a battlestar or Moloch, one is added to the light starship's attack dice roll. Exception: Starfighter squadrons and heavy starfighters do not suffer this modifier; this is because they can get inside the shield's force field, and also because they can aim at specific structures of the target. 

''h. Attack Uncoordination: ''

When two 

or more separately moving stacks of starships arrive at an orbit box where Space Combat will occur, each must be placed in the orbit box in its own stack. Just before combat occurs, the owner must roll a d6 for each stack: 1, 2 it will fight from the first combat round; 3, 4 it can join the battle on the second combat round; 5, 6 it can join on the third combat round. Starships cannot fight (or announce disengagement) before the round in which they are allowed to join the battle. 

This RaS procedure may result in no forces assigned to fight in the first or second combat rounds. In this case, forces assigned to the second and/or third round of combat can be "dropped" to the next lower, empty slot. For instance, if no starfleets were assigned to the first round, those that were assigned to the second round could "drop" to the first round and those of the third round could then shift to the second round.

A commander present in any of these stacks may affect attack coordination by making a number of stacks of his choice equal to half of his Command (frd), which would have entered the battle on the second or third round combat round, to enter battle from the first round instead. (A commander with a COM rating of four, for instance, can guarantee the coordination

of three stacks).

''i. Commanders in Space Combat''

'': ''

If a character is present in an orbit box where Space Combat will take place, it may be named to lead its side's forces, even if not currently stacked with the military units. However, unless the commander was already stacked with the military units, the character named must be that with the greatest rank among those present. If it is in a character spaceship that happens to be in the orbit box, the character could be shuttled to a starship. Both players may hide the exact starship that contains their commander (or any other passengers) by writing it down on a piece of paper and not placing the character(s) on the battlefield. The paper is shown to the other player after all attacks have been announced. Remember the fact that free shuttles of passengers between starships (and even character spaceships in the orbit box) are allowed at the beginning of each round of combat. Any shuttling may be done secretly and revealed only after attacks have been announced.

In the game there are no distinctions between "generals" and "admirals". In the Stellar Empire the Navy is considered a branch of the Army, and senior officers train in both the ground and space aspects of combat.

A character may use its COM rating to boost his side's attack by adding it wholly or partially to the STR of one or more of its starships. The sum of the STR modifications applied may not exceed the COM rating, and the increase applied to an individual unit cannot exceed that unit's basic (printed) STR.  

''j. Survival''

'': ''

If a starship carrying characters as passengers is destroyed in an orbit box, every character must roll for survival. Every spaceship carries enough escape pods for the crew and passengers (Imperial decree 552.4509, paragraph E). A 4 or less in a d6 means that the pod ejected successfully and the character survived. Exception: Prisoners

escape only on a 3 or less.  

If the escape occurs in an orbit box and there are any friendly starships or character spaceships (including an empty one being towed) there, any of them can pick up the pods. However, if there are only enemy starships in the Orbit box, the characters would be captured. In the rare case that characters in escape pods find themselves in an empty orbit box they would land on the planet.

Characters cannot refuse to use the escape pods, even if capture is certain (survival instinct takes over).

If a starship's destruction occurs from a GDN, the ship is assumed to crash-land and each character suffers d10-1 hits.

''k. King of the Hill''

'': ''

At the end of any Space Combat, only starships of one player may remain in a given orbit box. The other side must have been destroyed or withdrawn. As long as starships of both sides exist, combat must continue.

''l. Landed Light Starships:''

Light starships

may 

land on planets. However, if they are caught by enemy ground units while unaccompanied by friendly ground units they might be captured 

or destroyed. Roll a d6 for each such ship at the end of the segment in which the situation arose. 

''1-3'', the ship may fly up to the orbit box and from there to any other planet of the system, or to the system's Off Course box. If enemy units occupy the orbit box, they may attempt interception, and if an enemy GDN is present it may attack the ship. 

''4-5'', the ship is captured and may be used by the enemy. See 7.6. 

''6'', the ship is destroyed on the ground by the enemy or its own crew.

Landed starships cannot disengage by themselves from a Surface combat, but they can escort a ground unit that is disengaging. 

!!7.5 STARSHIP DAMAGE SPECIFICS

''a. Effects of Damaged Status: ''

In addition to the standard effects of damage, damaged

starships may be unable to hyperjump. Every time such a unit attempts to jump a d6 is rolled; a 5 or 6 prevents it from moving and it cannot use hyperjumping for the rest of that segment. In a combat, it could attempt impulse disengagement in subsequent rounds. In a normal move, it could remain in the orbit box it currently occupies, or move by impulse to a planet of the same system.

Damaged light starships that land on a planet may be unable to take off. Every time such a unit attempts to fly a d6 is rolled; a 5 or 6 prevents it from moving and it must remain in place for the rest of that segment.

Damaged starships cannot contribute to interception attempts nor can they participate in any subsequent Interception Combat. 

Damaged ships cannot contribute to tracking for enemy character spaceships, nor can they rake them if they are tracked.

Damaged starships are considered to have a CSP of zero.

If a transport in flight suffers hits the ground unit it is carrying suffers the same number of hits. If a transport is destroyed, the ground unit is destroyed.

The way you fit 20,000 men and women in the holds of a transport: Snug and tight in their niches, in brain-wave induced hibernation, waking them up periodically in small groups to attend bodily needs. And in spite of Imperial decree 552.4509 paragraph E, a transport just can't carry enough escape pods for 20,000 soldiers. The convention is: If the ship is going to bust, just let 'em sleep...

''b. Crippled and mangled starships: ''

A capital starship that is one hit away from destruction is considered to be crippled

. A cripple cannot move nor fire, and it must be placed in the screened line. It may move only by being towed by another starship with the same or greater END, or by no more than two starships that between them have a combined END equal to or greater than the cripple's. Towing may not be attempted during a disengagement attempt. 

If a cripple is left without other friendly ships capable of firing at the end of a combat round and the enemy side still has combat-capable ships, 

the opponent may attempt to board and capture the cripple by rolling a 1-4 on a d6; on a result of 5-6 it is scuttled. The captor may repair the ship and use it as his own. See 7.6. Crippled status never applies to light starships or the Moloch.

A damaged light starship that is one hit away from destruction is //mangled.// A mangled starship cannot even attempt hyperjumping, but it can still fire and may move by impulse. If it lands, a crash d10 roll must be made; on a result of 10 the ship crashes and is destroyed, with every character passenger suffering d10-1 hits and any transported ground unit is eliminated. A mangled landed starship cannot even attempt to take off.

Exception: Mangled status never applies to light starships that have an END of 2. They are simply damaged when they receive one hit. 

''c. Repair''

'': ''

Starship units can have their hits removed by repairing during the Repairs phase. Both players may effect repairs on their damaged military units, by expending 0.5 rp per hit.  

To be repaired, a starship must be in an orbit box (or, in the case of light starships, they may also be landed) of a friendly-controlled planet that contains no enemy units and is not under full blockade. 

Imperial units in any district may be repaired, even if it is not currently being taxed.

Rebel units may also be repaired at major and minor secret bases. 

!!7.6 CAPTURED STARSHIPS

''a. General: ''

Starships may be captured by the enemy when caught on the ground (7.4.l) or when crippled (7.5.b). Ownership of the starship counter passes on to the captor, who may use the ship as his own.

Captured starships may be repaired by the new owner, but they cannot be rebuilt if lost. When a captured starship is eliminated the counter returns to its original owner's countermix.

Ownership of a captured starship will usually be obvious by its location in a stack of starships of the captor, but in case that it could be doubtful (such as if the ship is left alone in an orbit box) it can be marked with some obvious out-of-use counter such as an unrest/commitment marker.

''EXAMPLE OF SPACE COMBAT''

Four Imperial stacks of starships arrived separately at an orbit box occupied by a Rebel heavy cruiser, two light cruisers, two frigates and four heavy starfighters. Mas Pantaleon (COM=4) is in command of one of the fleets, while Agelat (COM=2) is in command of the Rebel units.

Having arrived separately, the Imperial starfleets must roll for attack uncoordination (7.3.h). The rolls are 2, 6, 3, 6; 

indicating that the first starfleet will fight from the first round, the third will join in the second round, and the second and fourth until the third round. However, the commander may make a number of forces equal to half his COM to attack in the first round. Pantaleon's COM is 4, so he can coordinate two starfleets. He chooses to make the two fleets that would arrive on the third combat round to join in the first round instead. Therefore, only the third fleet remains uncoordinated and will arrive in the second round.

The other three starfleets are merged into a single one. They contain a battlestar, a heavy cruiser, three destroyers and a sloop, plus the commander.

Dice rolls (2d6) are made for surprise. The Imperial side enjoys a +1 drm due to its commander's COM rating. Agelat's COM rating of 2 is insufficient to modify the Rebel dice roll, however. The rolls are 3 and 11; the Imperials are surprised despite their drm!

The squadrons of both sides are assessed; the Imperial total CSP is 14, while the Rebel is only 9. The Imperial gets 14
&divide;

4=3 light starfighter squadrons, and the residue of 2 is sufficient to generate an extra squadron. The Rebel gets 9
&divide;

4=2 squadrons, but the residue of 1 is insufficient to grant him a third one. 

Fighters (light and heavy) must first be matched. Being the attacker, the Imperial decides which Rebel fighters he will engage, and he chooses the four heavy fighters. Considering them more dangerous, he wants to pull them away from his starships. This leaves two Rebel starfighter squadrons free, which must be placed on the line.

Both sides place everything in the frying pan, so to speak (that is, every ship in the front line). The Imperial player 

assigns his attacks as indicated by the gray lines in illustration no. 1, below. The Rebel starships targeted by the Imperial are all being attacked by equal or greater STR than theirs, so they have no choice but to fire back at their 

attacker. The heavy starfighters are attacked by less STR, but they must fire at the fighters they are matching because they are engaged. The two free starfighter squadrons fire as indicated by the white lines.

Mas Pantaleon (Command=4) assigns one factor from his COM to each of two destroyers, and two factors to the third, as indicated in the illustration. The Rebel player applies his two factors of Command to his heavy cruiser's STR, hoping to do some real damage to the battlestar. Notice that all Imperial units have -1 STR due to being surprised, while all the Rebels have +1.

We will spare the reader from the verbiage and present the attacks in abbreviated form. Attacks are resolved in order from left to right.

I fighter squadron vs. R heavy fighter STR=0 (5) miss.

I fighter squadron vs. R heavy fighter STR=0 (5) miss.

I fighter squadron vs. R heavy fighter STR=0 (4) one hit, destroyed.

I fighter squadron vs. R heavy fighter STR=0 (10) miss.

I destroyer vs. R frigate STR=2 (11) miss.

I heavy cruiser vs. R light cruiser STR=3 (5) two hits.

I destroyer vs. R frigate STR=2 (4) two hits.

I destroyer flak 2 against Rebel squadron,  (9) miss.

I battlestar vs. R heavy cruiser STR=7 (6) four hits.

I sloop vs. R light cruiser STR=0 (11) miss.

I sloop vs. R squadron flak 1, (7) miss.

I destroyer vs. R light cruiser STR=3 (7) one hit.

R frigate vs. I destroyer STR=3 (10) miss.

R light cruiser I heavy cruiser STR=4 (6) two hits.

R frigate and fighter squadron vs. I destroyer STR=3  (7) one hit and STR=1 (4) one hit.

R heavy cruiser vs. I battlestar STR=8 (4) seven hits. That gotta hurt.

''	Figure 1''

''	Figure 2''

''	Figure 3''

R light cruiser vs. destroyer STR=4 (3) five hits.

R fighter squadron vs. sloop STR=1 (9) miss.

R heavy fighter against I fighter squadron flak 1 (3), destroyed.

R heavy fighter against I fighter squadron flak 1 (4), destroyed.

R heavy fighter against I fighter squadron flak 1 (9), miss.

R heavy fighter against I fighter squadron flak 1 (2), destroyed.

Despite being the underdog, thanks to surprise the Rebel got the upper hand in this round. Especially notorious were the "ace" heavy fighters, who creamed the Imperial fighters.

Now the uncoordinated starfleet joins the fray, bringing a star cruiser and a light cruiser. The two ships have a CSP of 8, meaning that they bring two much-needed fighter squadrons with them.

Even though he is now outgunned, being encouraged by the results of the battle so far, the Rebel player decides to go on fighting. Surprise wears off in the second combat round.

First, fighters are matched as shown in illustration no. 2. Then the Imperial assigns attacks. He decides to leave the mangled destroyer in the screened line. COM ratings are 

applied as illustrated. Every Rebel unit is being attacked by equal or greater STR, so they must all fire back at their attacker.

I squadron vs. R squadron STR=0 (7) miss.

I squadron vs. R squadron STR=0 (5) miss.

I squadron vs. R heavy fighter STR=0 (10) miss.

I heavy cruiser vs. R light cruiser STR=6 (8) two hits.

I battlestar vs. R heavy cruiser STR=10 (5) seven hits, enough to destroy it. Agelat was aboard that ship; a d6=1 results in his survival in an escape pod, and a friendly ship rescues him.

I starcruiser vs. R light cruiser STR=6 (7) three hits.

I light cruiser vs. R frigate STR=3 (11) miss.

I destroyer vs. R heavy fighter flak 2 (6) miss.

I destroyer vs. frigate STR=2 (12) miss.

I sloop vs. R heavy fighter flak 1 (4), destroyed.

I sloop vs. frigate STR=1 (7) miss.

I destroyer vs. R frigate STR=2 (5) one hit.

R squadron vs. I squadron STR=0 (4) miss.

R squadron vs. I squadron STR=0 (8) miss.

R heavy fighter vs. I squadron flak 1 (3), destroyed.

R light cruiser vs. I heavy cruiser STR=3 (11) miss.

R heavy cruiser vs. I battlestar STR=5 (5) four hits.

R light cruiser vs. I starcruiser STR=3 (7) one hit.

R frigate vs. I light cruiser STR=3 (3) four hits.

R heavy starfighter vs. I destroyer STR=2 (6) one hit.

R heavy starfighter vs. I sloop STR=1 (7) miss.

R frigate vs. I destroyer STR=2 (8) miss.

The Rebel is now facing the consequences of his folly. Although he has done well and has mauled the Imperial fleet, he should at least have announced a prepared disengagement. Now he is at a clear disadvantage, and contemplating the annihilation of his force. 

Forces are aligned as shown in illustration no. 3. The Imperial decides to move the damaged light cruiser to the inactive line. Should the Rebel try a Hasty disengagement he would have to use the worst row of the table since the STR differential is +8. Instead, he announces (belatedly) a Prepared disengagement, and that he will go down fighting...

I squadron vs. R squadron STR=0 (4) hit, destroyed.

I squadron vs. R squadron STR=0 (7) miss.

I sloop vs. R heavy fighter flak 1 (11) miss.

I sloop vs. R light cruiser STR=1 (8) miss.

I heavy cruiser vs. R light cruiser STR=6 (10) one hit.

I battlestar vs. R light cruiser STR=6 (4) five hits, destroyed.

I starcruiser vs. R frigate STR=6 (6) four hits, destroyed.

I destroyer vs. R frigate STR=2 (9) miss.

I destroyer vs. R heavy fighter flak 1 (8) miss.

I destroyer vs. R frigate STR=1 (10) miss.

R squadron vs. I squadron STR=0 (7) miss.

R squadron vs. I squadron STR=0 (9) miss.

R heavy fighter vs. I sloop STR=1 (7) miss.

R light cruiser vs. I heavy cruiser STR=2 (12) miss.

R light cruiser vs. I battlestar STR=4 (3+1=4) The +1 because a light starship is firing at a battlestar (7.3.g). Enough to cripple it, though.

R frigate vs. I starcruiser STR=2 (5) one hit.

R frigate vs. I destroyer STR= 2 (9) miss.

R heavy fighter vs. destroyer STR=1 (5) one hit.

The pitiful remnants of the Rebel fleet now try to disengage... the differential is still +8, even after the Imperial player placed the damaged battlestar and destroyer in the screened line. Thanks to the Prepared disengagement, however, row 0 is used. Furthermore, an emergency warp disengagement is announced, which gives a -2 drm; a 7 or less on a d10 is needed, and a 3 is rolled. 

The Rebel light cruiser is damaged, though, and might not be able to jump. A d6 roll of 6 in fact indicates that the hapless cruiser stays behind. The Imperial fleet falls upon it like a pack of wolves, but it still manages to take down the sloop with it.

Only one Rebel frigate (with Agelat aboard) and two heavy starfighters survived the slaughter. Not all is rosy for the Imperial, though; his crippled battlestar can't move nor fire, and the Rebel moves next. He can bring a strong fleet here and attempt to capture the mammoth...

!''8. GROUND UNITS''

Although the characters in DWTE pave the way to the players' goals, it requires military success to secure victory. 

The Imperial side has a well-organized military arm that in the past has successfully created an Empire through offensive strategy. It is not, however, designed to deal with partisan activity in what it considers secure areas. Also, in the last decades it has fallen into corruption and inertia. The Rebel Concordance's army, small if measured by Imperial standards, is composed of scattered groups with great enthusiasm for their cause but no rigid organization to aid or hinder in their operations.

Each standard ground military unit (legion/division) in the game represents about 20,000 soldiers. In the 20
^^
th
^^
Century on Earth, millions of men fought over small sectors of the planet. In the future, it is not so important to hold terrain as to effectively control it by denying it to the enemy. As long as your forces can exert power and surveillance over all areas of a planet, it is not necessary to physically occupy every town and hamlet. Civilians, regardless of their political inclinations, tend to mind their own business as long as you leave them alone and local police forces can keep the peace. Also, a soldier of 3776 AD alone has the firepower of a 21
^^
st
^^
Century company. 

Furthermore, soldiers need to be transported from one planet to another, and even in the future there is only so much space in the holds of a transport spaceship...

!!8.1 INTRODUCTION

''a. General: ''

Both players are provided with a variety of military ground units

. The differing strengths of these units are based on the amount of equipment and technological development they have been supplied with, as well as training in its use. Military ground units are used to hunt for enemy characters, gain and keep control of a planet, and to destroy the enemy's military units.

All ground units except garrisons (Imperial conscripts and Rebel militia) are space-mobile due to organic transport ships that are assigned to them (or commandeered). 

The first number on a ground unit's counter is its Strength, representing its firepower and combat ability. The second number is the unit's Endurance, a measure of its toughness and ability to avoid casualties.

''b. Environmental Types: ''

Rebel 

ground units (except militia) are distinguished by being native to certain environment (the one of their home planet). This is noticed by a color code on the central band of the unit's counter, as follows:
<table width="398" cellpadding="9" cellspacing="0"> <col width="189"/>
 <col width="171"/>
 <tr valign="top"> |  ''Type'' |<span lang="es-MX">''ID Color'' |
 |  City |  Blue-gray |
 |  Natural |  Dark green |
 |  Atmospheric |  Light blue |
 |  Heat |  Yellow |
 |  Ice |  White |
 |  Sea |  Blue |
 |  Noxious |  Orange-pink |
 |  Underground |  Red |
 |  Station |  Black |

 There are no "station-type" Rebel units, and no Rebel units are ever considered to be in their native environment while on a station. The only Rebel ground unit type that can be built on a station is militia.  Aside from the Avsari Legion, no units can be built on the planet Avsar II.  A Rebel unit that is on a planet that matches its native environment gets a +1 to its STR. Notice that Rebel militia units do not have colored central bands; this means that they can never claim an environmental STR increase. A couple of special Rebel units (the Avsari Legion, the Pirates brigade) also lack a dedicated environmental type.  There are a few "neutral" units that have an environmental type, like the Barbarian hordes, the Vulcan Rangers, the Umbra Guard, the Draconian Mercs and the Federal Guard. They do enjoy the +1 to STR if they are in Imperial service.  Imperial Line units (1 ^^ st ^^ and 2 ^^ nd ^^ ) are like a fish out of water in peculiar environments (Atmospheric, Heat, Ice, Sea, Underground and Noxious).  They suffer a &ndash;1 to STR while they are on a planet that has any of these types. Elite and conscript Imperial units suffer no adverse modifier. 

Ice-type units (even elite) suffer a &ndash;1 to STR in Heat environments. Likewise, Heat-type units suffer the reduction in Ice environments.

Rebel regular and irregular units (except those of noxious type) suffer a &ndash;1 to STR in the noxious environs of Chalchtek 541. 

''c. Unit Sizes:''

Every ground 

unit has a given size, which affects stacking. The size is defined by the unit's symbol on the middle of its counter, as follows:

Horde (counts as two units for stacking)

Legion/division (counts as one unit for stacking)

Brigade (counts as &frac12; unit for stacking)

Battalion (zero stacking value, i.e. it can stack for free)

Company (zero stacking value)

Garrison (zero stacking value)

''d. Description of Ground Units:''

__Star Marines 5-10 (elite)__

//: //

The infantry branch of the Imperial Navy, the do-or-die forces of the Empire, soldier-for-soldier the star marines are undoubtedly better than any other in the galaxy. They focus on special missions, individual initiative and small unit tactics. They use less body armor, heavy weapons and AFV's than the Imperial Guards, which gives them a bit less of offensive punch; but their intensive training in virtually every conceivable situation allows them to ignore peculiar environmental effects.

__Stormtroopers 4-8 (elite)__

//: //

The backbone of the Imperial army, stormtrooper

legions represent veteran professional soldiers serving for a well-paid seven year period, extendible. They have good armor, efficient support weapons and good training. Their mercenary nature and experience makes them battle-wise and they therefore can ignore peculiar environmental effects.

__Line 3-6, 2-4:__

These are regular forces on their mandatory two-year military service.  With standard training, harsh discipline, light to medium armor, they are efficient forces. However, being primarily infantry with second-class support equipment and fighting vehicles, they tend to break when attacked with determination. 3-6 units are first line, while 2-4 represents a second line legion.

__Conscripts 1-2__

//: //

Unable to cover every planet in the galaxy, the Imperial army must rely on conscripts

to garrison many planets. These units usually are pure infantry without armor, with little more than hand-held guns and little, or no, training. Formed by reservists, native civil guards, policemen and levied populace, their organization, discipline and tactics are poor. Being purely local forces and representing up to 50,000 men and women, conscript garrison units cannot leave their planet's surface. Being native to the planet, they do not suffer adverse effects from peculiar environments, but being third-rate Imperials with corrupt and inept officers they don't get advantage from the terrain either. Conscript units have no stacking value, but there is a limit to how many a planet can support. There can never be more conscript units on a planet than one-half of the environmental size (frd, minimum one).

__Elite 4-8__

//://

The best the Rebels have on the field, with superbly trained armored troops, plus Rebel-built support equipment and AFV's, they are at least equal to most Imperial units. Many support weapons they carry show improvements created by Rebel scientists.

__Regulars 3-6__

//: //

These represent well-trained Rebel troops outfitted with whatever captured Imperial military equipment is available. Their high motivation makes them fierce fighters.

__Irregulars 2-4__

//: //

These are enthusiastic young persons embracing the cause, but somewhat lacking equipment and formal training. They have military organization and can give open battle, but against trained troops they are likely to be crushed. Their specialty is irregular

guerrilla warfare (ambushes, raids, hit and run tactics, etc.). A defending force that has a majority of irregulars (i.e. more than half of the units are of irregular type) gets a +2 drm for surprise dice rolls, and causes the enemy a -2 drm to their surprise roll. Exception: If the atacking force has a majority of elite units (i.e. more than half of the attackers are elite) the enemy side only suffers a -1 drm. The net effect is that Imperials would be surprised if their 2d6 surprise dice roll is 6 or less (5 or less with elite majority), while the irregulars are surprised only on a 2 (disregarding other possible modifiers). 

A defending force that has a majority of irregulars and surprises the enemy, and is not surprised, can either fight normally enjoying the standard advantages of surprise, or if the player wishes they can avoid combat entirely by "vanishing into the woods" (or depending on the terrain type, vanishing into the caves, sewers, clouds...) The irregulars would remain on planet but there would be no combat. Other troop types accompanying the irregulars in this instance can also enjoy the advantage.

__Militia 1-2__

//://

These are civilian supporters of the rebellion, who have risen and grabbed their pitchforks and shovels... well, maybe not exactly that, but perhaps Grandpa's old hunting lasegun. Most of what was said of Imperial conscripts applies to Rebel militia

s, including the inability to leave their planet, zero stacking value and planetary support limit. Rebel militias do not enjoy environment advantages.

__Sovereign's Own Units:__

Each sovereign has a special locally-raised unit which is so loyal that it will join forces with the faction that the sovereign commits to. As a common characteristic, all "sovereign's own" units are unique and irreplaceable and cannot be rebuilt if lost (but they can be repaired).

__Minor Faction Units:__

Some minor factions give a side military units when they commit. Minor faction units are unique and irreplaceable and cannot be rebuilt if lost (but they can be repaired).

!!8.3 SURFACE COMBAT

'' SPECIFICS''

''a. Disengagement: ''

When a ground unit 

disengages, it must mount its transport and fly to orbit; from there it must go the orbit box of another same-system planet, or to the off course box. If enemy starships are in the orbit box, they may attempt interception. Landed light starships may accompany the transports. If every military unit of a side is retreating from a planet, it is termed a general evacuation. 

For disengagement attempts, the COM rating of the commanders of both sides is applied just as it is for combat (8.3.b), modifying the STR of friendly units and consequently affecting the calculation of the STR differential.

''b. Commanders in Surface Combat''

'': ''

If a character is present on a planet where Surface Combat will take place, it may be named to lead its side's forces, even if not currently stacked with the military units. However, unless it was already stacked with the military units, the character named to lead the ground units must be the one with greater rank among those present.

A character may use its COM rating to boost his side's attack by adding it to the STR of one or more of its ground units. The sum of the STR modifications applied may not exceed the COM rating, and additionally the increase applied to an individual unit cannot exceed the unit's basic STR. If both sides have commanders, each must announce how his commander will affect his units after targets are announced (attacker first).

At the end of any combat round, provided some friendly ground units remain, their commander may unstack from them, detected (the usual purpose of this is to save the character from a hopeless battle).

When friendly ground units retreat from Surface Combat, their commander need not retreat with them and may remain on the planet, detected (the usual purpose of this is to rejoin its team).

''d. Surprise: ''

A force that has a commander in Surface Combat may add a modifier depending on its COM rating to its force's surprise dice roll, reducing the chances of surprise, but a dice roll of '2' ("snake eyes") is always a surprise regardless of modifications. The modifier is given below:

''SURPRISE MODIFIER''
<table width="319" cellpadding="14" cellspacing="0"> <col width="133"/>
 <col width="127"/>
 <tr valign="top"> |  ''COMMAND'' |  ''MODIFIER'' |
 |  0-2 |  0 |
 |  3-5 |  +1 |
 |  6+ |  +2 |

  ''e. Defeated Commanders: ''  When   a leader in Surface Combat loses all the troops under its command, roll a d10 and consult the Vanquished Commander Table.  ''f. Sharing a Planet: ''  Unlike Space Combat, there is  no "King of the Hill" rule in Surface Combat. If an attacker feels that continuing the assault would not be advised, but wants to keep a presence on the planet, he can call a halt on the battle at the beginning of any combat round. Exception: A halt may not be called on the round of an invasion, that is, the first round of combat that occurs after the attacker's units land on an enemy-occupied planet on which the attacker had no ground units previous to the landing.    If ground units of both sides are sharing a planet at the beginning of any Surface Combat segment, combat is not mandatory. The troops of both sides can remain in their trenches, glowering at each other.  ''g. Attaching Battalions:''  There are three battalion-sized units that may enter the game (all are sovereign-own units). Battalions may be //attached// to a legion/division unit simply by placing them under the larger unit. 

While attached, a battalion

adds its STR to that of its parent unit, and it cannot be targeted separately by the enemy. When the parent unit suffers hits, the owning player may apportion them between the parent and the battalion as he sees fit.

!!8.4 GROUND UNIT DAMAGE

'' SPECIFICS''

''a. Effects:''

Ground units are said to be //decimated// when they reach damaged status. Except for the reduced STR, there are no special effects for decimated units. The inherent transport of a ground unit is not affected by the latter's hits, including decimated status.

''b. Refit: ''

Ground units can 

remove their hits by refitting (taking in replacements, repairing equipment, etc.) during the Repairs phase. To refit, a ground unit must be on the surface of a friendly-controlled planet that contains no enemy units and that is not under full blockade (see section 7). A Rebel ground unit may also refit at minor bases. A cost must be paid; 0.5 rp per hit.

''EXAMPLE OF SURFACE COMBAT''

Rebellion has occurred on the planet Moronica 441. Two regular divisions (3-6) and a militia garrison (1-2) were created, and they engage the Imperials on the planet, a stormtrooper legion (4-8) a second-line legion (2-4) and a conscript (1/2). Koolet Ison (COM 3, +1 for being in a Sea environment due to his Water Denizen personal attribute, total COM 4) led the rebellion, and has been named to command the troops.

The Rebels enjoy automatic surprise due to the rebellion, which gives them a +1 modifier to STR. They also enjoy a +1 to their STR because they are in their own (Sea) environment.  The Imperials have -1 STR due to being surprised, and the second-line legion suffers another -1 due to being in a peculiar environment.
The Rebel assigns one 3-6 to attack the stormtroopers, the other against the second liners, and the militia to attack its similar, the conscript. Koolet applies 3 COM factors to the 3-6 attacking the stormtrooper, the maximum allowed given the unit's printed STR, and 1 COM to the other 3-6.

Each of the Imperials is being attacked by equal or greater STR, so they must forcibly fire back at their attackers. Attacks are as follows:

3-6 vs. stormtrooper STR=8 (7) four hits, decimated.

3-6 vs. line legion STR=6 (7) three hits, decimated.

1-2 vs. conscript STR=2 (4) two hits, destroyed.

Stormtrooper vs. 3-6 STR=3 (10) miss.

2
^^
nd
^^
line legion vs. 3-6 STR=0 (8) miss.

Conscript vs. militia STR=0 (5) miss. 

The stormtroopers are proud, but they know when to run and fight another day. They and the line legion try a hasty disengagement. In a wild attempt to save the elite legion, the Imperial player places it in the screened line, with the cannon-fodder line legion sacrificed in the front. 

The STR comparison is 13 against 0, and the worst row of the Disengagement table is used. Only a 2 or less on a d10 would save the line unit, but the inactive stormtrooper gets away with a 4 or less. A 4 is rolled  and  the  troopers  are   able   to

board their transport and fly away, while the other unit is devoured by the Rebels.

!''9.GLOBAL DEFENSE NETWORKS (GDN)''

The Global Defense Network (GDN) represents an array of tracking equipment tied into a command center, supported by a cloud of combat and surveillance satellites. A GDN may be supported by surface-based weapons to attack what the net has detected. 

!!9.1 INTRODUCTION

''a. General:''

Every planet in the game is provided with a GDN foundation, which may be used by the player who controls the planet. If a planet is currently in neither player's control (in rebellion), the GDN belongs to no one and therefore it cannot be used nor attacked. 

Whenever there is no GDN marker on a planet's GDN box, it is not functional. This may be due to it never having been built, to damage sustained in combat, or to other circumstances like sabotage. When a GDN is built (level 0 or greater) it exerts a military influence on its planet akin to that of a military ground unit, due to its weapon systems and inherent armed forces guarding the facilities. This can be important for certain game functions like the determination of planet control. It will also be able to interfere with enemy activities by firing at units entering or leaving the planet.

''b. GDN Levels, Damage and Repair:''

There are four GDN levels: 0-3. Each represents increasing levels of offensive and defensive weapons systems as well as improvements on tracking equipment. 

The STR of a GDN is similar to the STR of other units, the column it uses when attacking. The END is also similar. 

Hits accumulate on GDN's, but damaged status is not applicable to them. When a GDN has sustained hits equal to or more than its END, it is considered to be //disabled// . A disabled GDN is not flipped over to its "damaged" side, but instead it is topped by a "Disabled" counter. A disabled GDN cannot track nor fire.  A GDN that has not been disabled is considered "able".

All hits can be removed from an //owned// GDN (disabled or not) at no cost in the Repairs phase provided that theoretically a ground unit friendly to that GDN could refit on the same planet, given the current circumstances.

If a GDN was disabled at the moment it is repaired, it must be downgraded one level (eliminated, if level 0).

''c. GDN Marker: ''

Each GDN is represented in the game by a neutral white marker; the GDN is considered to be owned by the current owner of the planet. GDN markers of different levels are provided, to be flipped over or exchanged as the GDN increases or decreases in level. The current level is shown by placing the corresponding marker on the GDN box. The marker also shows the GDN's STR and END.

''d. Upgrading: ''

GDN's of both sides can be increased in level during the R&B phase. A GDN may not be upgraded in more than one level per phase. The cost of a level upgrade is 4 rp, except the first (from nothing to level 0) which costs 1 rp.  

''e. Changing Hands: ''

If a GDN changes ownership (by a planet becoming Concordance) the Rebel receives it "as it is", i.e. with the same level, able/disabled status, and hits as it had before.  

''f. Upkeep: ''

The Imperial player must pay upkeep (14.5.e) to maintain level 3 GDN's.  

''g. Tracking Modifier: ''

The current level of a GDN is subtracted from the die roll when that GDN is tracking an enemy character spaceship. It also applies for tracking attempts by friendly starships in the planet's orbit box.
!!9.2 GDN COMBAT

''a. GDN Attack During Starship Movement: ''

Whenever starships move from a planet up to the orbit box or vice versa, they may be raked by the GDN. This means that every stack of units moving together can be attacked once as they move past the defenses. The starships can't fire back, but screening is allowed. As in other combat, the GDN could conceivably hold back part of its STR in hopes of breaking through to the screened units. After the GDN fires, the surviving ships may continue their move.

''b. GDN Attack in the Tracking Routine: ''

If a GDN successfully tracks a character spaceship it may rake it if the planet's tension level is high enough; this means that the GDN attacks once using its STR. The ship cannot fire back. If it survives, it can continue its move. 

Some may object that the STR used against starships is the same used against character spaceships, where hits represent less actual damage. However, in the latter attack the GDN is assumed to be using secondary weapons appropriate for such a target.

If a character spaceship going up from a planet is severely damaged by the GDN, such that the moving player considers that continuing to move up to space would be too risky, he can abort the space flight and avoid entering the orbit box by landing again. However, in so doing the ChS will be subjected to a second raking attack by the GDN. The team's mission would be aborted as well.

''c. Space Combat and GDN's: ''

If a Space Combat occurs in an orbit box of a planet the GDN cannot participate directly.  However, when and if the defender's starships are removed (eliminated or disengaged), or if there never were any defender's starships to begin with, the phasing player's starships have two options:
<ul> <li>*They can remain without further action in the orbit box. A GDN is not considered a starship for effects of the "King of the Hill" rule (7.3.k), and combat against it is never mandatory for enemy starships. In fact, starships in an orbit box can coexist "peacefully" with an able enemy GDN on the planet below them.
<li>*They can subject the GDN to no more than two rounds of //bombardment.// This is resolved like a Space Combat, except that now the attacking starships can target and harm the GDN, and the GDN can fire back (including flak if fighters are involved). A GDN cannot disengage from a bombardment.
</ul> 

GDN's may never initiate combat against ships in orbit; they only defend if attacked.

The non-phasing player may never initiate a bombardment, even if he has starships in orbit above an enemy GDN. Only the phasing player can do so.

''d. Ground Combat and GDN's: ''

GDN's cannot participate in a Surface Combat directly. However, 

if at the end of a Surface Combat segment there are unopposed ground units of the phasing player (enemy to the planet's GDN) on a planet, whether there was a surface battle or not, the ground units have the option of engaging the GDN in no more than two rounds of //assault// . The GDN can fire back (if able) with its STR. The GDN cannot disengage. 

GDN's can never initiate combat against ground units; they only defend if attacked.

''EXAMPLE OF GDN BATTLES''

The Empire is in its death throes, and the Rebels advance victoriously everywhere. Part of their strategy involves invading district capitals to cut off Imperial resources once and for all.

Such an attack occurs against the planet Chiron 411. The Imperial has no starships and only a 1
^^
st
^^
Line legion to defend the capital, but he still has an ace up his sleeve: a level 3 GDN.

The Rebel force includes a battlestar, two heavy cruisers, a light cruiser, two frigates, 4 light starfighter squadrons and three elite divisions. The fleet arrives at Chiron's orbit and at the end of the Space Combat segment the Rebel player announces a bombardment.

The battle occurs as follows:

Battlestar STR=7 (9) 2 hits

Heavy cruiser STR=5 (8) 1 hit

Heavy cruiser STR=5 (10) 1 hit

Light cruiser STR=3 (6) 1 hit

Frigate STR=2 (7) 1 hit

Frigate STR=2 (12) miss

The squadrons roll 9, 8, 5, 11 and all miss.

GDN vs light cruiser STR=8 (5) 6 hits, the cruiser is blown out of the sky!

Flak 8, (5) two squadrons are destroyed.

Second round:

Battlestar STR=7 (7) 3 hits

Heavy cruiser STR=5 (9) 1 hit

Heavy cruiser STR=5 (12) miss

Frigate STR=2 (6) 1 hit

Frigate STR=2 (9) miss

The squadrons roll 9, 5 and miss again.

GDN vs frigate STR=8 (7), and another starship bites the dust.

Flak 8, (10) another squadron is eliminated.

In two rounds of Space Assault the GDN has suffered 11 hits, battered but still up. General, the bombardment has not been enough. Prepare for invasion! 

The Imperial player has wisely taken out the light starships. Maybe the Rebel should have left them in reserve. Now he has to send in the transports with only one frigate as escort. The transports are placed in the screened line.

The GDN player fires at the frigate with 6 STR and leaves two factors in reserve for a possible breakthrough. 2d6=6 and the frigate is fried in the sky!! 

2 STR vs one of the transports 2d6=3. Bam! 3 hits. The passenger also suffers 3 hits, and the transport is mangled. The transports land, and the mangled one rolls a d10 for crash. Terrible luck and a 10 is rolled... the tranport and the elite division are vaporized.

The other two divisions engage the 1
^^
st
^^
line Imperial legion in surface combat. They manage to destroy it, with one of them suffering 4 hits in the process and becoming decimated. 

Press on, General! This post must be taken today, no excuses. The divisions attack the GDN in Assault.

4-8 (7) 1 hit

2-8 (5) 1 hit

GDN 8 STR vs. damaged unit (8) 3 hits.

Second round:

4-8 (9) 1 hit

2-8 (5) 1 hit

The Imperial now divides his STR among the two enemy targets; GDN 4 STR vs each target:

Against 4-8 (9) 1 hit

Against 2-8 (8) 1 hit, enough to destroy it. 

The GDN survives everything, albeit with only one hit left. It cannot be repaired and surely will fall next turn, but it will

still get to cause some grief then, and it has kept control of the planet this turn. Also, it has caused a major disaster to the Rebel assailants; three starships, three fighter squadrons, and two elite divisions lost.   

!''10. DETECTION AND SEARCH''

When characters are detected, it means that the enemy is generally aware that agents of the opposition are nearby, but not exactly where, how many, etc. They still have to actually be found before anything can be done about them.

''10.1 DETECTION''

''a. General: ''

Characters and character spaceships may be either undetected or detected. When they are detected, place a "Detected" counter upon their stack. 

''b. Causes: ''

Detection

occurs: 
<ul> <li>*As a result of a successful tracking (see 6.3). 
<li>*As an effect of some random events during missions.
<li>*If a characters stacks with any military unit on a planet surface, even if only during a small part of a segment.
<li>*If a character debarks to a planet surface via shuttle from a starship in orbit.
<li>*If a character stacks (in an orbit box or planet surface) with another character that is detected, even if only during a small part of a segment.
<li>*Characters become detected if their character spaceship is detected and vice versa.
</ul> 

Being in a starship in orbit does not by itself cause detection.

Detection is contagious. This is because it represents more of a general awareness of your characters' presence than the precise location of any individual.  The increased alertness of the enemy forces puts everyone in peril. However, it is possible to have undetected characters in a planet alongside with detected ones. The enemy might be looking for "two men, a woman and a dog", while a Ragnari, a Drak and an android could be ignored.

''c. Removal: ''

Detection is removed from characters and character spaceships the moment that they leave an orbit box towards another orbit box on a different planet (impulse or hyperjump). As long as they remain on the same planet or its orbit box, they keep detection. Of course, they could be detected anew if the second orbit box contained enemy starships, but they would arrive there undetected.

Characters may also use the Hide mission to remove detection. Occasionally, a random event can also cause the enemy to lose track of them.

''10.2 SEARCH''

''a. General:''

In order to actually confront detected enemy characters, they must first be found. To do this, a player must conduct a search

. The non-phasing player may conduct a search for detected enemy characters in a planet occupied by his own characters and/or ground units, or at least controlled by him, during his Search segment. A different search is conducted against each different team or stack of characters without a team counter. The non-phasing player may also conduct a search for a detected enemy team performing a mission, if called for by a random event.

Search may not be conducted against enemy characters stacked with military units.

''b. Procedure: ''

The non-phasing player determines his Search value by adding together the STR of all his ground units present on the planet's surface, modified by any factors such as peculiar environment or the COM rating of any character currently leading them (a character not stacked with the ground units may not be named to lead at this time); //or// the Intelligence rating of one of his characters in a team not stacked with military units. If the searching player has more than one team on planet, the intelligence of one character from each team can be added; for instance, if there were three teams, the searcher could add together the intelligence of three characters, one (and only one) from each team.

The minimum search value is one. A planet without ground units or characters belonging to the enemy, but controlled by him, may effect searches with a token Search value of one, although it will probably be limited in its options upon finding any friendly team.

The search ability of an "empty" enemy-controlled planet and the militia/conscript soldiers that it may send against a found team represent local police forces.

The phasing player determines the Concealment value of his characters (only those in the currently searched team or stack) by adding the Intelligence rating of one of the characters in the group to the environmental size factor, and subtracting the total number of characters (MiC's included). The minimum Concealment value is one.

Refer to the Search chart and cross-reference the Search value and the Concealment value to yield a number. The searching player rolls a d10; if the result is equal to or less than that number, the characters have been found.

''c. Search and Destroy: ''

If a search is successful, the searching player may send a "search and destroy team

" (SDT) to attack the found characters. In this case he may choose one of the following options, if available, to meet and fight the mission team:

1.- One character team present on the planet that is not "done". Character teams have three options: To attack the found enemy team directly in a melee, to attempt an assassination, or to attempt an abduction.
<ul> <li>*A melee attack is a normal character combat between the two teams.
<li>*An Asn or Abd attempt is conducted as an immediately resolved mission. This option is available only in searches conducted during a Search segment; not in random searches or after abysmal failures. See the Mission profiles for further details. 
	  </ul> 

In any of the cases described above, after resolution the searching player's team has its team counter flipped over to its "Done" side, indicating that it will not be able to conduct missions in his upcoming Missions phase. 

2.- If ground units belonging to the searching player are present, d6# soldiers. The type of soldier is determined on the Patrol chart using the best ground unit present. The soldiers may be accompanied by their commander, if they have one. The player may see the size of the patrol generated before deciding if the commmander will go along. Note: If several different enemy teams are found on the same planet in the same Search segment, the commander of the ground units can accompany only one of the patrols.   

3.- If no ground units belonging to the searching player are present, but the planet is controlled by his side, &frac12; d6 militia/conscript soldiers. 

4.- If the Rebel player is the searcher and he has a Rebel camp on the planet, d6# guerrillas (regular soldiers).

5.- If a Special Forces detachment is present, three commando soldiers.

6.- If the Imperial player is the searcher and he has an SOE cell on the planet, a suicide bomber.
 !''11. MISSIONS''

The players hope to further their causes through the performance of different missions

. They may send their characters to swing the populations of the various planets in their favor, to gather information or to sabotage the enemy.

''11.1 ACTION TEAMS''

''a. General: ''

During the Team Organization segment of the Missions phase, the phasing player must organize all of his characters not stacked with military units 

into Action Teams by placing an identifying counter upon their stack (unless they already have one and he doesn't want to change it). Characters stacked with military units may also be organized into teams, but it is not mandatory.

A stack of characters may be divided if the player wishes them to split into different teams. He may also declare that characters that are physically separated are all part of the same team and will attempt to rendezvous during the Missions phase. Money can be distributed to teams during this segment. 

While assigning teams, the player may also define any characters that will do nothing in this phase in order to rest and heal by placing a "Rest" counter upon them. Resting characters remain stacked with their team until after the Search segment. Characters stacked with military units may also be assigned to rest during this segment.

If a character or characters not stacked with military units cannot be assigned to a team because all team counters available are in use, they must be sent to rest as well. 

Once assigned, teams may not split into smaller teams during this Mission Phase, although individual characters may "drop out". However, it is possible to have characters on different locations to be designated for the same team, having them rendezvous during the Action segment. 

If a team is already "done" at the beginning of its Mission phase, due to having performed some action in a preceding phase (such as SDT duty), it will continue to be so for the rest of the Missions phase (until the Reset segment when its "done" status will be revoked). It cannot be split, joined with other teams, or undertake any actions. It //is// subject to enemy search, though.

''b. Action Segments: ''

After organizing his teams, the player picks one and assigns it a mission from those defined later in this section. He should also assign a mission leader

by placing its counter on the top of the stack (directly beneath the Team counter), and announce the exact place where the mission will occur.  A given mission type may not be performed more than once in the same Missions phase on the same planet, but other teams may perform different types of missions on the same planet during the same Missions phase.

The "team leader

" is actually the character with the highest rank. However, the conduction of the mission is assigned to the character that is most able to carry it out, the "mission leader"; even the team leader will obey it in matters concerning the mission. The team leader is overall chief, carries the team's purse, and makes crucial decisions like aborting the mission or allowing a character to drop out. Its functions are assumed by the player himself when he makes game decisions.

The first chosen team will perform its Action segment to completion before the second team is picked and assigned a mission. After the second team completes its Action segment, the third will be picked, and so on until the last team resolves its mission. The player needs not predesignate the order in which he will pick teams, or the missions that he will assign them. As every team ends its mission for whatever cause, the Team counter is flipped over to its "Done" side. All the "Done" team counters are flipped over to their front side during the Reset segment.

''11.2 MISSION RESOLUTION''

''a. General:''

An Action 

segment consists of a Preliminary step, six Action steps, and a Final step. The current step is marked by placing the "Active" team counter (corresponding to the team that is currently performing a mission) on the appropriate box of the Mission track. At the beginning of the mission the Active counter should be placed on the Preliminary step circle of the Mission track.

The Active counter is moved along the Step boxes as the mission progresses. Characters may suffer delays which penalize them by sliding the counter one or more boxes towards the Final Step, allowing the team less action. On the other hand, some events may favor the team by sliding the counter back towards the Preliminary step, with the effect of buying them more "time" to do things and increase their mission's chances of success. These modifications cannot take the counter actually back into the Preliminary step box, or forward into the Final box. The first and sixth Action step boxes are limits.

When the team is inactive, the Active counter should be kept with the team's cards.

''b. Preliminary Step:''

In this step the player rolls for pre-mission random events using the appropriate Random Events table, and carries out the instructions given for the result, if any. Then, if desired, the team may shop (14.2.d) for spaceships. Unless they will be passive passengers on a spaceship, resting characters are unstacked from their team in this step and do not participate of the mission (or its dangers). 

''c. Action Steps: ''

An action step may be used either for movement, for field activity, or for extrinsic activity. The movement, field activity or extrinsic activity (as the case may be) is resolved while the Active counter is resting on that step's box. At the end of the step the counter is moved into the next box (unless special events dictate otherwise) and a new step begins. 

''d. Movement: ''

Unless the 

Action team is already exactly where the player wants it, it will have to move. The player announces that this will be a movement step and proceeds (as described below). No random event dice roll is made for the step itself (although players may have to consult the Hyperspace Random Events table on occasion). Once the move is resolved, the step is over and the Active counter is moved one space along the Mission track. It may be that a team will need to move more than once in an Action segment; each separate move will consume a step.

Movement of characters usually involves traveling in a character spaceship (see chapter 7 for alternative forms of movement). A spaceship (with characters) can be moved from a planet's surface up to its orbit box and vice versa. From the orbit box the ChS can move to another planet's orbit box, and once there it can stay in orbit or descend to the surface. All this would be considered part of the same move; i.e., a single move could be from surface of one planet to surface of another planet, passing through two orbit boxes.

Moving to another planet in the same star system uses impulse movement and is automatically successful (barring enemy activity). Moving to a different star, however, implies a hyperjump (see 3.2).  During a step, a team of characters can only move between a maximum of two planets, one of origin and one of destination. After completing one move the team could move again, but that would consume another step.

If a bad jump places a team in an off course or lost box, if able it must move again in an attempt to reach its destination (and will consume a new step in the process).

A team normally must use a movement step to get as close as possible to its mission goal. It must try to do it in one move, unless the distance factor is greater than the spaceship's pilot Navigation rating, in which case the trip may be divided into smaller "chunks" that accommodate that rating. A team may also deviate from the most direct course if it needs to fulfill a requisite or to drop/fetch a character. One mission, Free Movement, has no specific mission goal and allows the team to move around and perform extrinsic activities.

Characters that are not piloting the spaceship (i.e. passengers) may engage in healing or repairs during a movement step. 

''e. Field Activity: ''

If the team is already in place, it may proceed with field activities

to bring about its goal. First, a roll is made for random events using the Action Step Random Events table, and the player carries out the instructions given for the result, if any. Then, unless the mission was aborted due to a random event, the player gains a "field activity step completed" (FASC), which is noted by sliding the FASC counter one box down the Mission Track. The FASC marker should be placed in the Preliminary Step circle at the beginning of a team's Action segment. The FASC marker will frequently be in the same box as the Active marker, but not always. After completing a field activity step and sliding the marker(s), the step ends and play proceeds to the next step. 

FASC's are never gained during preliminary, extrinsic activity or movement steps, and the FASC marker is not moved after those steps.

Should the number of completed field activity steps exceed six, mark the surplus with a hit marker under the FASC marker and leave it on box 6.

Example: A player is performing a Propaganda and Diplomacy mission with one of his teams. He had to spend one step as movement, but then he managed to complete five field activity steps; therefore his FASC marker is on space five of the Mission Track at the end of the mission. 

''f. Extrinsic Activity: ''

Certain special situations may require a team to "do nothing" (regarding the mission) during a step, to perform some other action (such as repairing an item) or to meet a requirement. A random event dice roll is not made during an extrinsic activity

step. Each different activity type requires a different extrinsic activity step; for instance, you can't use the same step that was used by Dr. Fedorova to heal her teammates to pick up a treasure. The latter would consume an additional extrinsic activity step. Organic character healing and the repair of items are considered to be the same type of activity and can be performed in the same step, but not by the same characters. Dr. Fedorova could not heal her teammates and also repair her spaceship in the same step, for instance; but it would be OK for Bagul to repair the ship while the doctor heals.

''g. Aborting: ''

Aside from events that may abort a 

mission, a player may decide to call it off voluntarily at the end of any step except the 6
^^
th
^^
. Either way, the mission ends and no further events good or bad can happen to the team. Any accumulated FASC are lost. 

''h. Commitment: ''

If the player allows the Active marker to enter the 6th Action Step box, the team is committed.

The team may not voluntarily abort the mission and after resolving the 6
^^
th
^^
step it must proceed to the final step with whatever FASC it has, unless a random event prevents it. However, if the Active marker entered the 6
^^
th
^^
box involuntarily (due to a displacement caused by an event for instance) the player has the choice of aborting the mission immediately.

A player cannot allow the Active marker to enter the 6
^^
th
^^
box if it is possible that the team will not be on the mission's target location during the Final step. If this is the case, the mission must be aborted.

''i. Final Step: ''

After resolving all the previous steps, play proceeds to the Final step (when the Active marker reaches the Final Step box). At this moment the player calculates his Mission Total (MT) value.  This is usually done by doubling the FASC obtained during the action steps, but in some difficult mission types the basic FASC value is kept without doubling. Whether the FASC will be doubled or not is defined in each mission's profile.

Then the player adds or subtracts any special modifiers that may apply due to circumstances defined in that mission's profile, events, character special talents, items, etc. The sum is the mission total. 

Example: A team performing a CdE mission managed to get 5 FASC. The CdE profile states that FASC are basic for this mission, so the final FASC is 5.

The team has, for various reasons, a total modifier of +3 to the FASC. This means that the Mission Total for this Coup will be 8. 

A d20 is rolled. In general, a result equal to or less than the MT is a success and anything greater than the MT is a failure. However, success and failure may have degrees, as indicated in the chart below.

Every mission's profile details the effects of the degrees of 

success and failure for that particular mission.

LEVELS OF SUCCESS/FAILURE  <table width="596" cellpadding="14" cellspacing="0"> <col width="283"/>
 <col width="255"/>
 <tr valign="top"> |Level |Description |
 |''Spectacular Success (level 3)'' |If the result is 20+ less than the mission total |
 |''Brilliant Success (level 2)'' |If the result is between 19 and 10 less than the mission total |
 |''(Simple) Success (level 1)'' |If the result is between 9 and 0 less than the mission total |
 |''Partial Success (level 0)'' |If the result is 1 or 2 greater than the mission total |
 |''(Simple) Failure (level -1)'' |If the result is between 3 and 6 greater than the mission total |
 |''Abysmal Failure (level -2)'' |If the result is 7+ greater than the mission total |

  To resolve a mission, the team must be on the mission's target location. Otherwise it would have been automatically aborted prior to the 6 ^^ th ^^ step.  ''j. Premature Commitment: ''  For a   number of reasons, a player may want to "go for it" in a mission before reaching the Final step. This choice is allowed at the end of every Action step except the 6th. The mission total is calculated by adding the FASC accumulated so far (doubled or not depending on the mission), with any positive special modifiers that may apply halved (frd after adding them together), and any negative special modifiers doubled. After resolution the mission ends (no continuance).  Suppose a team has suffered wounds that make continuing its P&D mission too risky, after having completed only three field activity steps. The team has accumulated 3 FASC so far (doubled to 6), and the player decides for a premature commitment. The mission leader's CHA is 4 (which gives a FASC modifier of +3) and another team member's CHA is also 4 (which gives an additional +1). The total positive modifier is +4, which is halved (due to the premature commitment) to +2. In addition, the planet is of natural type, causing a -1 modifier. This is doubled to -2 due to the premature commitment. The mission total is 6+2-2=6.  ''k. Extreme Results: ''  There is always a  
chance of failure in the most easy mission, or of success against all odds. If the die roll for a mission resolution d20 is a '1', the final result of that roll is always one level better than it would otherwise be. For instance, if the normal result  for a '1' given the MT would be a brilliant success, an original '1' would turn it into a spectacular success.

If a mission resolution d20 is a '20', the result of that mission is always one level worse than it would otherwise be. For instance, if normally a '20' would cause a simple success, an original '20' would turn it into a partial success.

Spectacular success (level 3) and abysmal failure (level -2) are the high and low extremes of mission results. They cannot be modified further even by extreme die rolls. 

''l. Continuing Missions: ''

Most missions

can be continued in the next Missions phase if complete success is not achieved in the first. To be eligible for continued activity, the mission must meet the following requisites:
<ul> <li>*It must not have been prematurely committed.
<li>*It must have ended in Partial Success. Any full level of Success or any Failure automatically ends a mission.
<li>*It must not be a mission where a Partial success does have an effect.  
	  </ul> 

Place a "Continue" counter of the appropriate mission type upon the team. The continuning team may save for the next turn half of the FASC accumulated during the action steps (frd). The value used to calculate the amount saved is the basic FASC number obtained in the Final Step, prior to any doubling or the application of modifiers. Mark this with a hit marker under the "Continue" marker. In the next turn, the FASC marker for this team will be placed on the box of the Missions Track equal to the number of FASC saved instead of the Preliminary step circle.

Example: A team ended an Esp mission with 7 FASC and a +1 modifier, and rolled a partial success. It may continue the mission, saving half (frd) of the basic FASC it had in this turn's Final Step (7 halved to 3).  For this purpose, any doubling of the FASC and the +1 modifier are ignored. A hit marker with the number '3' is placed under the team's 'Continue Esp' marker, and in the next Action segment for 

this team, the FASC counter will begin in box 3 instead of the Preliminary Step box.

For a continuing mission, the team keeps any temporal characters that it may have obtained from random events. However, a team continuing a mission may not get in the next turn more MiC's of the same type as it already received at the beginning of the mission, if they are still with the team (you can't get an additional civilian guide if you already have one, for instance). If you have a "Johnny-come-lately" civilian guide kept from the previous turn (RE 98), in this turn it would give +2 to FASC, not +1.

The team may also keep any money it has, and may receive more funds in the next Action segment's Preliminary step. A continuing mission does roll for random events in the following turn's Preliminary step.

If at the beginning of the next turn's Action segment the team decides that it doesn't want to continue that mission after all but engage in another, it will be penalized by losing the first Action step for the switch (and of course dropping all the temporal characters and accumulated FASC for the discarded mission).

''m. Dropping off: ''

A player may want to continue a mission even if one of the characters is badly wounded, but it might be too risky to continue 

dragging the character along, as an accident or a fight might kill it. Such a character may be dropped off from the mission by unstacking the counter at the end of any step except the 6th. It is no longer in the mission, but it cannot claim healing from resting in this Action segment. Characters that are resting or have dropped off may temporarily rejoin their team as passive passengers on the spaceship, if their team is leaving the planet. Once they arrive at a new planet, they must unstack again. Dropped-off characters rejoin their teams in the Repairs phase, just like resting ones.

''n. Home Planets and Nobility: ''

If a character is on a planet which is its home, it might receive a favorable modifier for certain missions. Likewise, if the character is considered a noble on that planet it might give a modifier. Each mission details in its profile whether Home or Nobility

factors have any effect on its outcome. 
 "
Nobility" does not necessarily imply traditional aristocratic titles. A senator or president can be nobility on his planet for game purposes.

''o. Team Size Limitation:''

An 

Action team may never contain more than five main characters. If a player has a large stack of MaC's in excess of this, they must be split into two or more smaller teams. They can travel together in a spaceship with a large capacity, but upon arrival at a new planet they must split again.

''p. Para-character Missions: ''

There are a number of entities that can perform missions aside from character teams. These include Adim Agnot adepts, Rebel cells/camps, special forces, bounty hunters, and the assassin droid. 

Some para-character

missions are performed in the Missions phase, but others are executed at other times (as defined in each case).

These mission have in common the following:
<ul> <li>*They do not have Preliminary or Action steps, just a Final step.
<li>*They are not subject to any random events. 
<li>*Para-character missions cannot be assigned sc.
<li>*They have their FASC predetermined. This applies to all missions, and is doubled or not depending on the mission type. Most modifiers to FASC may apply as well.
<li>*Extreme results (11.2.k) do not apply to them. However, a d20 roll of '1' prior to any modifiers in a para-character mission is always considered at least a simple success.
</ul>    
<ul> <li>*Para-character missions ignore all the ill special effects of an abysmal failure. 
<li>*Otherwise, levels of success do apply to them (but given their low FASC value, it would rare for them to get anything better than a simple success).
<li>*Para-character missions may never be continued.
</ul>    
''11.3 RANDOM EVENTS''

''a. General: ''

At the beginning of every Preliminary step and field activity Action step in an Action segment, the phasing player rolls d% and consults the appropriate Random Events Table.

The results are self-explanatory. No random events

occur in those steps devoted to movement, in extrinsic activity Action steps, or in the Final step.

Most events can be repeated if they come up more than once, but in many cases there will be no further effect when they repeat. Those that can't be repeated are identified by an asterisk (*); if they come up again, it is treated as 'no event'. 

If an event allows you to ignore a subsequent event, the latter cannot happen thereafter, even if a dice roll indicates so. You must ignore it entirely (you can't keep the parts you like).

During a mission it is easy to forget previous events, especially if there is a melee combat. If a random event affects later Action steps or mission resolution, or is a "no repeat" event, a note should be made on a piece of paper, or an appropriate marker can be placed at one side of the Missions Track.

When a mission is aborted, in addition to any other effects of the random event, the mission is immediately canceled and any previous FASC achieved are lost.

Characters that didn't go out on a mission are immune to random events. Characters that are no longer active on a mission (because they dropped off) are also immune to any events that occur after they quit.

''b. Mulligans: ''

A mulligan is a card that a player may receive by a random event. He may keep it and use it later to re-roll a die or dice roll that he didn't like. He may only re-roll any die or dice roll that he made; never his opponent's rolls.

It may be used anywhere, not just with the mission team that caused the mulligan event. After one use the mulligan is discarded and returned to the deck. The number of mulligans in the game (five) is a limit; if all five are currently held and an event grants another one to a player, he receives nothing.

''c. Monsters: ''

A monster

is a person, animal, plant or environmental phenomenon (other than soldiers and angry civilians) that can be randomly encountered during a mission and usually represents a danger to the player's characters, although occasionally it may even be beneficial. At game start all the monster counters are placed face-down on the planets randomly, being careful to match the environmental types. (Note: There is an extra monster counter for each environmental type). The first time that a random event calls for a monster attack on a given planet,

put the monster counter face up. Read the attributes of the monster in the Monster Charts.

Once a monster is discovered, that will be "The" monster of that planet for the rest of the game, which will be used for every subsequent encounter by both players' teams (and for the present one that generated the monster, of course). Normally, the monster is a creature that attacks the team in a hand-to-hand melee, but there are many exceptions to this as defined in each monster's entry of the applicable Monster Chart (see appendix E). 

''d. Angry Civilians:''

Whenever a random event calls for an attack by a mob of angry civilians, the team is met by d10# civilians (STR=1, END=2) in a hand-to-hand melee. Any characters that are "killed" by angry civilian

s are not really dead; they end up in jail (5.5.d) instead with only enough hits to be in wounded (not grievous) status.
''11.4 REBEL CELLS AND CAMPS''

''a. Sleeper Cells: ''

Each level of success in the Plant Rebel Cell mission allows the Rebel player to place a sleeper cell on the planet. Place a Rebel Cell marker with a "Sleeper" counter on top. A planet may 

contain more than one cell. A sleeper cell represents a small group of agents which for the time being will keep a low profile and do nothing to attract enemy attention. Sleeper cells have no effect on play, and they cannot be affected by Imperial actions. 

''b. Active Cells: ''

At the beginning of a future Missions phase (never the same in which the cell was planted), the Rebel player may declare that a sleeper cell will activate by removing the Sleeper marker. An active cell may perform only Esp and Sab missions. Once a cell is activated, it cannot become a sleeper cell again.

''c. Rebel Camp: ''

At the beginning of any future Mission phase (never the same in which the cell was activated from a sleeper), the Rebel player may attempt to upgrade an active cell to a Rebel camp by rolling 1, 2 or 3 on a d10. If there is more than one cell on the planet, they may join efforts with each extra cell adding three to the chances. For example, two cells would create a camp with 1-6, three would be successful with 1-9, and four or more would be automatically successful. The Rebel player always has the choice of not joining cells and have them roll separately in an effort to create multiple camps.

A Rebel Camp may perform missions CdE, Esp, InD, InS, PeF, P&D, PRC, RaM, Res, Sab and Ste. A Rebel Camp may guard prisoners.

''d. Missions:''

A Rebel cell/camp performs a mission as a para-character (11.2.p). An active cell always gets one FASC; a Rebel camp gets two FASC. This is used to calculate the Mission Total.

All the personal attributes (intelligence, courage, etc.) of a Rebel cell/camp are considered to be '2' for purposes of determining modifiers to FASC. Rebel guerrillas are considered to be on their home planet (not nobility) for effects of mission modifiers. They are considered to contain Travisians in the team on Travisian planets.

If a Rebel camp performs a Raise Money mission, the cashier receives money as if two team members participated.

Characters may never accompany a Rebel cell/camp on a mission. On the other hand, guerrillas from a Rebel camp (not cell) can accompany a character team, but only if the camp forfeits its ability to perform a mission during that Missions phase. Two regular soldiers would be added to the team. Each Rebel camp may generate guerrilla escorts for only one friendly team.

The limitation of 11.1.b prohibiting a given mission type from being effected more than once on the same planet in the same Missions phase extends to cells/camps as well.

''e. Irregular Division Creation: ''

If a Rebel camp (not cell) exists when the planet goes into rebellion, the Rebel player must remove the camp and substitute it with an irregular     (2-4) ground unit. A Rebel cell would be simply be removed (without creating an irregular unit) if rebellion occurs.

''f. Suppression:''

The Imperial player may suppress a Rebel camp by having unopposed ground units on the planet surface at the end of any Imperial Surface Combat segment. The suppression number depends on the combined STR of the ground units (including any modifiers such as peculiar environments or a commander), compared to the planet's environmental size (see Rebel Camp Suppression chart). A d20 is rolled, and the result must be less than or equal to the number obtained on the chart. The Imperial player may roll against every camp on the planet (a different roll for each).

If a Rebel camp is suppressed it becomes a Rebel cell, and an "Unavailable" marker is placed upon it. The cell will be inactive during a number of game turns (excluding the turn of suppression) equal to a &frac12; d6. Place a hit marker equal to the result under the "Unavailable" marker, and the Rebel player may reduce it in one at the beginning of every Missions phase. When the last "hit" is removed, only the "unavailable" marker remains. On the next Missions phase, that marker is removed and the cell is available to effect missions or for attempts to upgrade it to a camp again.

Rebel cells (except sleeper) may be destroyed by a level 2+ success on an Espionage mission. A simple success in that mission will merely suppress the cell (with the same effects described above for military suppression).

''g. Guerrillas: ''

Rebel camps may conduct search against Imperial teams. Each camp 

has a search value of one. If successful, the Rebel player may send a guerrilla force against the enemy team consisting of d6# regular soldiers. Guerrillas may also attack when the Rebel is entitled to send an SDT against an Imperial team (11.5.b).

''11.5 MISSION PROFILES''

''a. General: ''

All the mission descriptions are found here. Each mission profile contains the following information:

__Crucial__

: The mission leader's characteristic that is crucial to the mission, and might need to be checked against in a crisis.

__FASC__

: Whether the basic FASC obtained in the mision are halved, basic or doubled Final step, reflecting the mission's level of difficulty.

__Bribe ceiling__

: The maximum FASC modifier that can be attained for this mission by bribes. Normally every 100 sc grant a +1 FASC modifier, but if the value given here is in parenthesis, you need 200 sc to get a +1 modifier. 

A team leader may spend fractions of 100 sc in a bribe, but it is not certain that it will get a modifier from that fraction. To do so, the fraction or less must be rolled on a d%. For example, a team spends 145 sc in bribes. It will get a +1 for sure, and there is a 45% chance of getting a second +1 thanks to the fraction. 

If the bribe ceiling is in parenthesis, halve the fraction (of 200 sc) before rolling the d% (fru).  For instance, if a team spent 285 sc in bribes for such a mission, it would get a +1 for sure from the first 200 sc and would have to roll 43 or less (85 halved) with a d% in order to gain a second +1.

__Location__

: defines on what part of a planet (surface or orbit) the mission can take place.

__Profile__

: A general description of the mission and definition of requisites and limitations.

__Modifiers__

: A list (not exhaustive) of possible modifiers that may apply to FASC during resolution. A modifier may produce a negative result; for example, if the modifier is (STR-2), and the STR is 1, the final modifier is -1. 

__Effects__

: Describes what happens depending on the level of success or failure achieved. 

''b. Search and Destroy Team: ''

For Abysmal Failures, one possible result is frequently, "the team is met by an enemy SDT". In this case the enemy may send an SDT to fight the failed team, chosen from the options he has on-planet just as it is done during a Search segment, except that in this instance the enemy cannot attempt Asn or Abd missions.

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;''ABDUCTION''
'' (Abd)''

''Crucial:''

Intelligence.

''FASC:''

Basic.

''Bribe ceiling:''

(+1).

''Location:''

Surface.

''Profile:''

May attempt to kidnap a prominent member of the opposition. May only be attempted during the Search segment of the enemy Missions phase, against a character in a found team, who must be named as mission objective in the Preliminary step and cannot be switched later. 

Despite being resolved outside of the friendly Missions phase, this mission is conducted exactly as any other, with Preliminary and Action random events, the Missions Track is used, etc.

This mision cannot be conducted as a result of a random-event-prompted search during an enemy mission, or when an enemy team has to face an SDT due to an abysmally failed mission; only in the Search segment.

''Modifiers:''

''-2	''

Inherent mission difficulty modifier (applies at all times)

''+1''

	Mission leader's Intelligence is 4+.

''-1''

	If target's Intelligence is 4+.

''-1	''

If the combined Intelligence of the other characters in the target's team is 5+.

''-1	''

If the target's team can't be surprised.

''-1''

	If the abducting mission team is detected.

''-2''

	If the target is an Avsari, Linori Lindi, or a sovereign with retinue.

''-4''

	If the target is the Emperor with retinue.

''+1''

	If the planet is any team member's home.

''Success''

: The target is captured.

''Partial''

''Success''

:  The target is lightly wounded (2 hits).

''Failure''

:  No effect.

''Abysmal failure''

: Roll a d10: 

''01-09''

The team is detected and met by a target's side SDT. 

''10''

Roll a d6: 

!!1-4 

The team is detected and the mission leader is captured. 

!!5-6 

The team is detected and the mission leader is killed. 

''&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;''

''ASSASSINATION''
'' (Asn)''

''Crucial:''

Courage.

''FASC:''

Basic.

''Bribe ceiling:''

(+1).

''Location:''

Surface.

''Profile:''

May attempt to "terminate" the life of a prominent member of the opposition (a legitimate "combatant" target, of course...) May only be attempted during the Search segment of the enemy Missions phase, against a character in a found team, who must be named as mission objective in the Preliminary step and cannot be switched later. 

Despite being resolved outside of the friendly Missions phase, this mission is conducted exactly as any other, with Preliminary and Action random events, the Missions Track is used, etc.

This mision cannot be conducted as a result of a random-event-prompted search during an enemy mission, or when an enemy team has to face an SDT due to an abysmally failed mission; only in the Search segment.

''Modifiers:''

''-1	''

Inherent mission difficulty modifier (applies at all times)

''+1''

	Mission leader's Intelligence is 4+.

''-1''

	If target's Intelligence is 4+.

''-1	''

If the combined Intelligence of the other characters in the target's team is 5+.

''-1	''

If the target's team can't be surprised.

''-1''

	If the assassination mission team is detected.

''-2''

	If the target is an Avsari, Linori Lindi, or a sovereign with retinue.

''-4''

	If the target is the Emperor with retinue.

''+1''

	If the planet is any team member's home.

''Success''

: The target is killed.

''Partial Success''

:  The target is grievously wounded.

''Failure''

:  No effect.

''Abysmal failure''

: Roll a d10: 

''01-09''

The team is detected and met by a target's side SDT. 

''10''

Roll a d6: 

!!1-4 

The team is detected and the mission leader is captured. 

!!5-6 

The team is detected and the mission leader is killed. 

''&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;''

''COUP D'ETAT''
'' (CdE)''

''Crucial:''

Command.

''FASC:''

Basic.

''Bribe ceiling:''

+2.

''Location:''

Surface.

''Profile:''

May only be performed on Imperial-controlled or Imperial-owned planets. May attempt to topple the current ruler(s) of a planet and replace them with someone more agreeable to the cause. This mission does not always represent a sudden seizure of power by a military junta (although sometimes that might well be the case). In a parliamentary system, for instance, maybe it's only necessary to involve the current prime minister in a scandal, bringing its downfall and the installation of your politician of choice. Even Imperial Viceroys and Station Commanders are subject to being framed and discredited. Some government types are more vulnerable to coups than others, as reflected in the modifiers below. 

Notice than even in pro-Rebel coups, the new government is theoretically still loyal to the Empire, and will hurry to kneel before his Majesty. A "pro-Rebel" politician might not even know that it was brought into power by Rebels, and would be shocked by the thought. Perhaps it was chosen because of weakness, or excessive harshness that will alienate the population against the Empire. More frequently, the new governor is secretly a Rebel who pays only lip service to the Empire and will aid the rebellion.

At start, every planet in the Empire has its Coup box empty, reading: "Coup, None". When a Coup d'Etat occurs, place a Coup counter of the appropriate color on the box. If a new coup occurs, place another counter of the contrary color on top of it, indicating that two coups have occurred there. If yet a third coup happens, place a third counter, etc. to a maximum of //five.// The number of markers stacked on the coup box is used to calculate a modifier for future coups, as repeated events of this type tend to destabilize the planet more and more. The number of Coup markers in the countermix is //not// a limit. If you run out of Coup markers, replace the counters under the topmost Coup marker (the one indicating who last performed a coup there) with a hit marker equal to the number of markers replaced. 

A side may not perform a Coup d'Etat on a planet if the coup counter currently reflects that side's color (you wouldn't want to remove the very guy that you placed there, right?). 

A Travisian must be in the team in order to attempt a coup on a Travisian planet.  

''Modifiers:''

''+1''

	Mission leader's Command is 4+.

''+1''

	Mission leader's Rank is 4+.

''+1''

	Mission leader's Intelligence is 4+.

''+x''

	The planet's current coup number (as reflected in the number of coup markers).

''+1	''

If the planet is any team member's home.

''+1''

	If the mission leader is nobility on the planet.

''+1''

	City environment.

''-4''

	Govt: Collective Mind, Hive.

''-3''

	Govt: Council of Elders, Theocracy.

''-2''

	Govt: Plutocracy

''-1''

	Govt: Monarchy, Stewardship, Presidency for Life, Democracy.

''0''

	Govt: Imperial Viceroy/Commander/Captain-General.

''+1''

	Govt: Politburo, Council of Notables.

''+2''

		Govt: Parliament, Republic, Dictatorship.

''Success''

: Modify the planet's unrest in the player's favor by a number equal to (level of success + 1). Can't cause rebellion.

''Partial Success''

: No effect.

''Failure''

: The team is detected and met by an Imperial SDT (if Rebel) or jailed (if Imperial).

''Abysmal failure''

: Roll a d10: 

''01-09''

The planet's unrest level is modified one level in the enemy's favor, the team is detected and met by an Imperial SDT (if Rebel) or jailed (if Imperial). 

''10''

Roll a d6: 

!!1-4 

Team detected and one RaS character is captured (jailed if Imperial). 

!!5-6 

The team is detected and one RaS character is killed.     

''&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;''
''ESCAPE''
'' (Esc)''

''Crucial:''

NA.

''FASC:''

NA.

''Bribe ceiling:''

0.

''Location:''

Surface or orbit.

''Profile:''

A group of prisoners may try to stage an escape. This mission is special in that it does not have Preliminary or Action steps; it is solved only as a Final step with a base of 0 FASC and the modifiers given below. May not be attempted in consecutive Mission Phases by the same group and/or in the same place. Cannot be attempted if the prisoner is held at a Rebel secret base or Earth 111.

''Modifiers:''

''+x''

	Mission leader's intelligence minus two (INT-2).

''+1	''

For every escaping prisoner with a COU of 4+.

''-1''

	If the guards are elite troops.

''-1''

	If the most intelligent enemy character's intelligence is 4+ (if the guards are characters).

''+2''

	If the guards are militia/conscript/local jailers.

''-1''

	If attempting to escape from a ship in orbit.

''Brilliant  Success''

: All the prisoners escape! Place them detected on the planet surface (even if they escaped from orbit).

''Success:''

One RaS prisoners escapes.

''Partial success: ''

No effect.

''Failure''

: No effect.

''Abysmal failure''

: Each frustrated escapee suffers &frac12; d6 hits.

''ESPIONAGE''
'' (Esp)''

''Crucial:''

Intelligence.

''FASC:''

Doubled.

''Bribe ceiling:''

+2.

''Location:''

Surface.

''Profile:''

An attempt to get vital information on the enemy's strength, plans, secrets, etc. through covert activity. The location where an Esp mission must be conducted varies; see section 17. In the case of Enemy characters and cells, it must be on the same planet where they are located. For Military Information it may only be performed in a planet that the enemy owns or controls, or if there are enemy military units present on the planet. 

''Modifier:''

''+x''

	Mission leader's intelligence minus two (INT-2).

Espionage is a most versatile mission. The following objectives are attainable with it (the player must specify what he is attempting each time):

__Enemy Characters__

:

Every full level of success will cause one enemy team on the planet to become detected.

__Military Information__

:

May attempt to gain knowledge about the composition of an enemy starfleet in the same district. 

''Partial Success''

: Only the number of starships in the starfleet is revealed.

''Success''

: The exact contents of the starfleet is revealed, including everything it contains, the number of hits each unit has, characters and character spaceships, and if any unit therein has a Special Forces unit assigned.	

''Brilliant Success''

: Same as a simple Success, but the player may also see all the other starfleets in the district.

''Spectacular Success''

: Military intelligence network cracked! Same as a simple Success, but the player may see ALL the enemy starfleets in the game.

__Rebel (SOE) Cells__

:

May attempt to dismantle an active Rebel (or SOE) cell. 

''Simple Success''

: The cell is suppressed (11.4.f).

''Brilliant Success''

: The cell is dismantled.

__Enemy (or Minor Faction Seat) Secrets__

:

May attempt to gain information about secrets. Certain secrets require that the team be in a determined location (see section 17). A fact is equivalent to a box checked in the Secrets Log, or the uninverting of an inverted secret facility counter. Note: If a successful mission grants you more facts discovered than the particular secret you are investigating has left, the surplus can be applied to other secrets, but these would be randomly selected.

''Success:''

Every level of success reveals a secret fact.

__Counterespionage: __

May attempt to protect one of your side's secrets with a "shroud of lies". Every full level of success in counterespionage causes a cumulative -2 modifier to the enemy FASC when he is attempting Espionage against that secret. The accumulated modifier is noted on the enemy's Secrets Log, at one side of the secret affected. The accumulated modifier may never exceed +10. See 17.7.

__Counter-counterespionage:__

A player may use an Esp mission to clear some of the fog surrounding an enemy secret due to counterespionage. Every level of success reduces the enemy counterespionage accumulated modifier in 2 points. Also see 17.7.

''Failure (All Esp Missions): ''

The effects of failure are the same regardless of what your team was attempting.

Partial Success: No effect (unless otherwise specified).

Failure: No effect. 

Abysmal failure: Roll a d20: 

''1-10''

The team is detected, and it has only muddled things. Any future Esp against this particular objective will have a -2 modifier to FASC (the modifier functions exactly, and can be removed, as a Counterespionage modifier). 

''11-19''

The team is detected and met by an enemy SDT. 

''20''

Roll a d6. 

''1-4''

The team is detected, and one randomly selected character is captured. 

''5''

-

''6''

The team is detected, and one randomly selected character is killed. 

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''FREE MOVEMENT''
'' (FrM)''

''Crucial:''

NA.

''FASC:''

NA.

''Bribe ceiling:''

0.

''Location:''

Multiple planet orbits or surfaces.

''Profile:''

The objective of this mission is only to move between two or more locations, perhaps using one or more Action steps to do some extrinsic activities such as fulfill a quest, heal, repair or fetch something/someone. It consists only of the Preliminary step and 5 (not 6) Action steps that may not be used for any field activity. There is no Final step. 

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''GENERAL RESEARCH''
'' (GeR)''

''Crucial:''

Intelligence.

''FASC:''

Basic.

''Bribe ceiling:''

+4.

''Location:''

Surface.

''Profile:''

An effort to gain knowledge of general or specific nature that may be beneficial to the war effort. In more concrete terms, you may try to glimpse next turn's Stellar Event. This mission can also be used to flip over an inverted monster counter (without activating the monster). What you are trying to find must be predesignated.

''Modifier:''

''+x''

	Mission leader's intelligence minus two (INT-2).

''Success''

:	For every level of success you may see one future Stellar Event card. Level one will let you see the topmost card, level 2 the two topmost cards, etc. You can't see any deeper than your level of success, even if you had already seen those cards from a previous mission. Or, you can discover the monster of a planet.

''Partial Success or worse:''

No effect.

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;   ''HIDE''
'' (Hid)''

''Crucial:''

Intelligence.

''FASC:''

Doubled.

''Bribe ceiling:''

+1.

''Location:''

Surface.

''Profile:''

May attempt to remove the detected status of a team of characters on a planet.  

''Modifiers:''

''+x''

	Mission leader's intelligence minus two (INT-2).

''-1''

	For every 4 characters in the team (frd).

''+2''

	The planet's environmental size factor is 9+.

''+1	''

The planet's environmental size factor is 5-8.

''+2''

	If the planet is any team member's home.

''Success:''

Detection is removed from the team.

''Partial Success''

: No effect.

''Failure:''

	No effect.

''Abysmal failure:''

Not only does your team not hide, but it is found and met by an enemy SDT.

''INCITE DEFECTION''
'' (InD)''

''Crucial:''

Command.

''FASC:''

Doubled.

''Bribe ceiling:''

(+3)

''Location:''

Surface.

''Profile:''

Rebel player only. An attempt to convince an entire military unit to switch sides and join the good guys! All units except Star Marines and the Imperial Guard can be incited to defect. Substitute the defecting unit with a Rebel unit with the same values of city or natural type.  Exception: In the case of peculiar units without Rebel counterparts, such as some Sovereign's Own units,  the Rebel can keep the counter with some kind of notation as to its new allegiance.

Note: If you roll a success, but not sufficient for your specific target to mutiny, continuance is allowed (as for a partial success) but keeping //all // the FASC gained (not half).

''Modifiers:''

''+x''

	Mission leader's Command minus two (COM-2).

''+1	''

Mission leader's rank is 4+.

''Spectacular Success:''

Nothing less than this will cause a stormtrooper or another elite unit to see the light.

''Brilliant Success:''

You need this for a line unit or landed starship to mutiny.

''Success:	''

You need this to make a conscript mutiny.

''Partial Success:''

No effect. 

''Failure:''

No effect.

''Abysmal failure''

: The team is compromised while trying to subvert the unit; it is detected and met by a patrol of d6# soldiers from the unit that it was trying to corrupt.

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''INFLUENCE SOVEREIGN''
'' (InS)''

''Crucial:''

Charisma.

''FASC:''

Doubled.

''Bribe ceiling:''

(+2).

''Location:''

Surface.

''Profile:''

May attempt to modify a planet ruler's attitude in the player's favor through secret negotiations. See the rules for Sovereigns (5.6) for further details.

''Modifiers:''

''+x''

	Mission leader's charisma minus two (CHA-2).

''+1''

	Mission leader's rank is 4+.

''+1''

	Mission leader's command is 4+.

''+x''

	The sovereign's current commitment level (reversed for Imperial).

''+x	''

The planet's current unrest level (reversed for Imperial).

''+1''

	If the planet is any team member's home.

''+2''

	If the mission leader is nobility on the planet.

''Succes''

s: For every level of success, modify the sovereign's commitment level one level in the player's favor. 

''Partial Success:''

No effect.

''Failure: ''

No effect.

''Abysmal failure:''

	Insult. Modify the sovereign's commitment one level in the enemy's favor.

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''PERSUADE FACTION''
'' (PeF)''

''Crucial:''

Charisma.

''FASC:''

Doubled.

''Bribe ceiling:''

+2; 0 for the Avsari Order.

''Location:''

Surface.

''Profile:''

May attempt to modify a minor faction's commitment in the player's favor through secret negotiations. See the rules for each faction (section 16) for further details.

''Modifiers:''

''+x''

	Mission leader's charisma minus two (CHA-2).

''+x''

	The faction's current commitment level (reversed for Imperial).

''+x''

	Faction special modifiers applicable to your side.

''Success''

: For every level of success, modify the faction's attitude one level in the player's favor.

''Partial Success''

: No effect.

''Failure''

: No effect.

''Abysmal failure''

: Injury. Modify the faction's commitment one level in the enemy's favor.

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''PLANT REBEL CELL''
'' (PRC)''

''Crucial:''

Rank.

''FASC:''

Doubled.

''Bribe ceiling:''

+3.

''Location:''

Surface.

''Profile:''

Rebel player only. May attempt to organize one or more cells of fanatic resistants, which will be able to perform some missions for the Rebel cause. May only be performed on a planet that is controlled or at least owned by the Imperial side. See 11.5 for more details on Rebel cells.

''Modifiers:''

''+x''

	Mission leader's rank minus two (RNK-2).

''+x''

	The planet's unrest modifier.

''+2''

	Planet's environmental size 15 (Earth).

''+1''

	Planet's environmental size 8+ (except Earth).

''+2''

	If the planet is any team member's home.

''+1''

	If the mission leader is nobility on the planet.

''+1''

	City or Natural environment.

''-1''

	Atmospheric or Heat environment.

''-2''

	Noxious or Station environment.

''Success''

: One sleeper cell is placed on the planet for every level of success.

''Partial Success''

: No effect.

''Failure''

: No effect.

''Abysmal failure''

: Team detected and met by an enemy SDT.
 &#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''PRISONER INTERROGATION''
'' (PrI)''

''Crucial:''

Intelligence.

''FASC: ''

Basic.

''Bribe ceiling:''

+1.

''Location:''

Surface.

''Profile:''

A player may attempt to learn enemy secrets by questioning a prisoner. It may be attempted by a team stacked with a captured enemy MaC (MiC's may not be captured or interrogated).  

The Imperial player (only) may use //torture// to increase his chances of success; but if he does so, before every Action step random event dice roll is made, the prisoner receives d6-3&deg; hits. If it dies or is grievously wounded, the mission is aborted (obviously).

See section 17 for further details on this mission.

''Modifiers:''

''+x''

	The interrogator's intelligence minus 2 (INT-2).

''-y''

	The prisoner's courage minus two (COU-2).

''+5''

	If torture is applied.

''Success''

:	For every level of success, a secret fact is revealed (see section 17). A fact is equivalent to a box checked in the Secrets Log, or the uninverting of an inverted secret facility counter. Note: If a successful mission grants you more facts discovered than the particular secret you are investigating has left, the surplus can be applied to other (RaS) secrets.

''Partial Success''

: No effect.

''Failure''

: No effect.

''Abysmal failure''

: Roll a d6: 

''1-5''

If torture was used, the hits on the prisoner are doubled. 

''6''

The prisoner is closed, and will not reveal anything more for the rest of the game.

''PROPAGANDA AND DIPLOMACY''
'' (P&D)''

''Crucial:''

Charisma.

''FASC:''

Doubled.

''Bribe ceiling:''

+2.

''Location:''

Surface.

''Profile:''

May attempt to modify the planet's unrest level in the player's favor through propaganda directed at the populace, or secret negotiations with delegates of the local government, syndicates, media, industry, etc.  

''Modifiers:''

''+x''

	Mission leader's charisma minus 2 (CHA-2).

''+1''

	For every team member with a charisma of 4+, including the mission leader (these modifiers are cumulative; for instance, if the leader has CHA=5, he grants +3 //and// +1 to the mission).

''+x''

	The planet's unrest level (reversed for Imperial propaganda).

''+x''

	The sovereign's (if any) commitment level (reversed for Imperial propaganda).

''+1''

	If the planet is any team member's home.

''+2''

	If the mission leader is nobility on the planet.

''+1''

	City environment.

''-1''

	Natural environment.

''-1	''

On a Travisian planet, if there is no Travisian in the team.

''-3	''

Rebel P&D against a capital planet.

''Success''

: For every level of success, modify the planet's unrest one level in the player's favor. Cannot cause rebellion.

''Partial Success''

: No effect.

''Failure''

: No effect.

''Abysmal failure''

: Serious breach of protocol. Modify the planet's unrest one level in the enemy's favor.

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''RAISE MONEY''
'' (RaM)''

''Crucial:''

Intelligence.

''FASC:''

Doubled.

''Bribe ceiling:''

+10. 

''Location:''

Surface.

''Profile:''

OK guys, we're short of cash, so go see what you can fetch... An attempt to get some extra small change, by honest (or dishonest) work, begging, stealing, asking for contributions, gambling, etc. Note: MiC's do contribute to raising money. Every character member rolls separately when a variable quantity money is gained.

''Modifiers:''

''+1	''

If mission leader's intelligence is 4+.

''+1	''

For every team member with a charisma of 4+.

''Spectacular Success''

: Jackpot! The team raises d6 thousand credits!!! 

''Brilliant Success''

: Every team member raises (d10 x 50) sc! 

''Success''

:	Every team member raises (d10 x 10) sc.  

''Partial Success''

: Every team member raises d10 sc.

''Failure''

: Every team member raises 1 sc.

''Abysmal failure''

: One RaS team member is caught red-handed and goes to jail. 

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''RESCUE''
'' (Res)''

''Crucial:''

Courage.

''FASC:''

Doubled.

''Bribe ceiling:''

0.

''Location:''

Surface. (

__SF team: Orbit__

).

''Profile:''

May attempt to free friendly characters that are currently prisoner. If the guards are enemy characters, they must be detected before the rescue can be attempted.

''Modifiers:''

''+x''

	Mission leader's courage minus two (COU-2).

''+x''

	Mission leader's command is 4+.

''-1''

	If the guards are elite troops /

__a capital ship__

.

''-1	''

__Into /through a blockade__

.

''-2	''

On Earth 111.

''-1''

	If the most intelligent enemy character's intelligence is 4+ (if the guards are characters).

''+2''

	If the guards are militia/conscript/local jailers.

''Success''

: The prisoners are free! The characters are detected.

''Partial Success''

: No effect.
</span>
''Failure''

: No effect.
</span>
(

__SF team: Possible damage__

).

''Abysmal failure''

: Team detected and met by an enemy SDT.
 &#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''SABOTAGE''
'' (Sab)''

''Crucial:''

Intelligence.

''FASC:''

Doubled.

''Bribe ceiling:''

+1.

''Location:''

Surface. (

__SF team: Orbit__

).

''Profile:''

A daring covert mission to blow up enemy units or facilities. May target one enemy military unit, the planet's GDN (if enemy) or strategic targets (only on an enemy-controlled planet). 

''Modifiers:''

''+1''

	Mission leader's intelligence is 4+.

''-2''

	If the characters are detected at resolution.

''-1	''

__Into /through a blockade__

.

''-1''

	If the target is Elite 

__or a capital ship__

.

''Spectacular Success''

: Badaboom!! Secondary explosions!! The target is destroyed whatever it is. For a strategic target, the enemy loses (&frac12; d6 + 2) rp from his track. 

''Brilliant Success''

: Kaboom! The target suffers d6+5 hits. For a strategic target, the enemy loses two rp from his track. 

''Success''

: The target suffers d6# hits. For a strategic target, the enemy loses one rp. 

''Partial Success''

: Poof. Poorly placed explosion causes only one hit.  For a strategic target, the enemy loses 0.5 rp. 

''Failure''

: No effect. (

__SF team: Possible damage__

).

''Abysmal failure''

: The team is detected placing the charge, and met by a patrol of d6# soldiers. If the target is a ground unit, it generates the patrol. Otherwise, if enemy ground units are present, RaS one of them to generate the patrol. If no ground units exist but the enemy controls the planet, the team meets a militia/conscript patrol.  

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''SPARK REBELLION''
'' (SpR)''

''Crucial:''

Rank.

''FASC:''

Doubled.

''Bribe ceiling:''

(+1).

''Location:''

Surface.

''Profile:''

Rebel only. Once a planet's unrest level is at maximum (+3), a Spark Rebellion mission is needed to give it the final push and make the populace rise against oppression.  

''Modifiers:''

''+1''

	The mission leader's rank is 4+.

''+1''

	The mission leader's courage is 4+.

''Spectacular Success''

: The planet goes into rebellion, and rp for the Rebel player (both for track and for local builds) are double the normal value. If the immediately ensuing Rebellion Combat clears the planet surface from Imperial forces, it immediately goes into Concordance (without having to wait for the Concordance Allegiance phase and the effects of possible Imperial reaction).

''Brilliant Success''

: The planet goes into rebellion, and rp for the Rebel player (both for track and for local builds) are double. 
	</span>
''Success''

:	The planet goes into rebellion.

''Partial Success''

: Part of the planet goes into rebellion, but a Civil War ensues as many loyalists also rise to defend the Empire. The Rebel player gets only half of the planet's resource points (fractions rounded up), and the Imperial gets the other half. See 13.2.e for details.

''Failure''

: No effect.

''Abysmal failure''

: Fiasco. The team is detected and met by an Imperial SDT, and the planet's unrest level is decreased in one.

&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;&#8213;  
''STEAL RESOURCES''
'' (Ste)''

''Crucial:''

Intelligence.

''FASC:''

Basic.

''Bribe ceiling:''

+2.

''Location:''

Surface.

''Profile:''

A daring sting mission to get hold of a large quantity of enemy valuables, such as a shipload of gold, weapons, spices, etc. May be performed only on an enemy-controlled planet. Note: if you steal more than the enemy has, you still get the rp, and the enemy incurs a debt that must be paid as soon as possible.

''Modifiers:''

''+1''

	Mission leader's intelligence is 4+.

''+1	''

Mission leader's courage is 4+.

''-1	''

__Into /through a blockade.__

''Spectacular Success''

: Major sting!! d6+6 resource points stolen!

''Brilliant Success''

: &frac12; d6+3 rp stolen.

''Success''

: &frac12; d6 rp stolen.

''Partial Success''

: 0.5 rp stolen.

''Failure''

: No effect. (

__SF team: Possible damage__

).

''Abysmal failure''

: Team detected and met by an enemy SDT.

''EXAMPLE OF A MISSION''

Saturn Team formed by Dr. Fedorova, Bagul, Huat and a Protocol Droid on the Space Courier, begins an Action segment on Intlig 342. The Rebel player announces that it will perform a P&D mission on Aurora 421, and places:

''Field Activity Steps (FASC) marker on Preliminary step circle.''

''(Saturn) Team Active (TA) marker on Preliminary step circle.''

The Rebel player makes a Preliminary Random Events d% roll, and gets a 77, which is no effect since no sovereign is present. The TA marker is advanced into the '1' box. 

The FASC marker is not advanced because the Preliminary step gives no FASC.

''FASC on Preliminary step circle.''

''TA on box 1. ''

The player announces a movement step from Intlig to Aurora. No random events are rolled for a movement step. The Space Courier piloted by Bagul flies up to Intlig's orbit box, and it fails to be tracked by the GDN and some Imperial starships there. Then the hyperjump is resolved; the distance is less than the pilot's NAV, so the leftmost column of the table is 

used, but Bagul must have fallen asleep because she rolls boxcars (12) and is off course. The Courier is placed on the off course box of the star Lacaille 42. The movement step is over, the TA marker is moved into the '2' box. The FASC is not advanced because movement steps give no FASC.

''FASC on Preliminary step circle.''

''TA on box 2.''

The Rebel has no choice but to declare another movement step. Since this is an intrasystem move, no hyperjump roll is made. The Courier lands uneventfully on Aurora, again surviving detection by the GDN. The TA marker advances to box '3', the FASC still remains where it is.

''FASC on Preliminary step circle.''

''TA on box 3.''

Now the real business begins; a field activity step is announced. A random event d% of 80 indicates a mission crisis. The crucial characteristic for P&D is CHA; Dr. Fedorova has CHA=5, and furthermore the Protocol Droid gives a -2 drm, a 2 is rolled and the team gains a +2 modifier to FASC. A field activity step has been completed, so the FASC advances into box '1'. The TA advances into box '4'. 

''FASC on box 1.''

''TA on box 4.''

Field activity; RE=92, bounty hunters. A bounty hunter attack occurs, but the team manages to defeat the hunters in a melee combat. The FASC advances into box '2'. The TA advances into box '5'. 

''FASC on box 2.''

''TA on box 5.''

RE=74, rescheduling of activities. The TA will not be advanced at the end of this step, but will remain on the '5' box. The FASC does advance into the '3' box, since a field activity step has been completed.

''FASC on box 3.''

''TA on box 5.''

RE=02, accident. A d10=1 indicates a scratch. RaS indicates that Bagul gets the hit. Both markers advance.

''FASC on box 4.''

''TA on box 6.''

RE=46, the team is detected. Both markers advance, the TA enters the Final Step box, so the mission activity is over and the MT must be calculated.

''FASC on box 5.''

''TA on Final Step box.''

The FASC marker indicates that five field activity steps were completed. The basic FASC for P&D missions are doubled, so 2x5=10 FASC were gained.

To this is added:

+2 from the successfully resolved mission crisis.

+4 from the team leader's CHA (Dr. Fedorova's CHA of 5).

+2 from the Protocol Droid's modifier.

+1 because the team spends 100 sc from its purse in bribes.

-2 for the current unrest of the planet (which is at -2).

+1 for the City environment.

The mission total is 18. And the result of the mission is... (drums rolling): d20=7. This is 11 less than the mission total, so it is a brilliant (level 2) success! Aurora's unrest is increased two levels, to 0, and a 1
^^
st
^^
degree SWE is initiated.

To end the mission, the Saturn Team counter is flipped over to its "Done" side.

!''12. ITEMS''

''12.1 INTRODUCTION''

''a. General: ''

There are dozens of different items

in the game, represented by cards (and sometimes counters as well). Each represents something of special use to characters. There are five types of items: character spaceships, weapons, devices, companions and treasures. 

Weapons, devices and companions are called "common items"; they are neutral and usually are placed in a common deck where either player may draw them when appropriate.

Character spaceships have separate decks for the Imperial and the Rebel players; the spaceships of one side may never be captured, used or held by the opponent. Spaceships usually must be bought, although some are granted for free at game start.

Treasures are neutral. They appear as instructed by specific Stellar Events, and usually may be picked up by characters of either side.

''b. Acquisition: ''

An Action team may acquire a common item through a Preliminary Step random event.

Common items are acquired from the top of the out-of-play deck, which is shuffled at game start. When a common item is lost in any manner, it returns to the bottom of the deck and may be drawn again in the future. 

When buying a spaceship, the player may actually look for it in the spaceships deck instead of drawing randomly.

Treasures may be picked up by a team when they appear on a random planet.

''c. Assignment: ''

When a team acquires an item, it must immediately be assigned to a main character. MiC's may not be assigned items (in fact, sometimes they are the items!). Exception: The Combat Droid may be assigned a weapon. The assignment must not exceed the character's ownership limits. If an item cannot be assigned because all of the characters are already "fully loaded" one of them must either discard an item it already owns, or the newly acquired one. Items may be exchanged between characters in the same location (even from different teams) at the beginning or end of any step in the team's Action segment.

Spaceships may be assigned to military units, which can guard them, tow them around and even repair them.

''d. Ownership Limits: ''

A character may simultaneously own: No more than one character spaceship, no more than one weapon, no more than two companions, and overall no more than four items. Items it cannot carry must be given to other characters or discarded. Exception: A character may own two weapons if one (and only one) of them is of defensive type.

A character may own an item even if unable use it.

''12.2 USE, LOSS AND REPAIR OF ITEMS''

''a. Use: ''

ChS's are used as described in section 6. Companions are always "in use" in the sense that they are MiC's and must be accounted for at all times. They may also have a special talent that can be used at particular times. Weapons are used during melee. Devices are used when their power is needed, and can be used at any time.

Unless otherwise specified, items can be used indefinitely. If an item can malfunction due to use, or if it must be discarded after use, its description will specify when and how that happens.

''b. Loss: ''

If a character is killed or captured, its weapon and devices are discarded and returned to the bottom of the deck, and may be drawn again. Its character spaceship, companions and treasures are immediately reassigned to another MaC in the team. If no other friendly MaC's exist to receive the items, all are discarded and returned to the appropriate deck. Exception: Treasures would be abandoned in the place where the character died, subject to be picked up by either side, unless the death was in space. In this case the treasure is lost forever... 

If a character is jailed, its weapon and devices remain with it until its situation is resolved one way or the other. Its companions and spaceship remain with the team. If all the team falls in jail, they do keep ownership of companions and ships until their situation is resolved.

''c. Repair:'' Spaceships and robots are subject to damage in combat, and all items are subject to malfunction due to random events.

A MaC (and some MiC's) may attempt to repair

an item's damaged or malfunctioned status during an extrinsic activity Action step. Spaceships are repaired as detailed in 6.5.b. Unlike spaceships, damaged and malfunctioned companions and devices may be repaired not only on planet surfaces but also by passengers in orbit (helps kill the boredom of long flights).

The character repairing an item need not be the owner.

A character may attempt to remove a robot's hits. If the character rolls its Intelligence rating or less with a d10, the robot gets the same number that was rolled of hits repaired (and any malfunction counter is removed). For every 5 sc spent on "spare parts" a +1 modifier to the INT applies (for repair purposes only). The maximum "spare parts" modifier is +3, but the modifier can be kept for a subsequent attempt if the first one fails. Notice that the spare parts for a robot are cheaper than those of spaceships.

Devices usually don't get hits, but they may malfunction.  The repair procedure is the same as for robots, except that no spare parts may be bought for a device. Note: Organic companions are wounded by hits and subject to healing (by resting or otherwise); they may not be "repaired".

On occasion a random event causes a weapon to jam. Jammed weapons cannot be used, but are automatically repaired at the end of the Missions phase. However, if the player thinks that it is really needed before that, it can be repaired as any other item (no spare parts).

Clarification: When the NNP-36 pistol jams because of combat use, as described in the item's card, the effect lasts only until the end of the current melee (it is due to overheating). Of course, the NNP-36 can also jam normally due to random events, in which case it will be jammed until the end of the Missions phase. 

''12.3 WEAPONS''

''a. General: ''

A weapon

may be classified as Ranged only, HtH only, or Ranged/HtH. Only hand pistols and plasma swords fall in the last category. Every non-Avsari character is assumed to carry an inherent laser pistol, the most basic weapon. Being a pistol it is useful for both types of melee, and it is already integrated to the character's basic STR. Avsari characters are assumed to carry an inherent plasma sword. 

When a character uses a weapon item in melee, its usual effect is to boost its STR. It is assumed that the item is somehow stronger than the basic laser pistol, and that difference is the STR modifier. If a character is carrying a weapon that bolsters only one type of melee, it can still of course use its basic STR (laser pistol) for the other type.

On the weapon's card, the number on the upper right corner is the modification to the character's STR, while that on the left upper corner is the modifier to its Avoidance factor. Notice that this modifier affects only characters that actually have such a value; it has no effect on characters without it. If the STR modifier is underlined, there is a minimum STR requirement to wield the weapon.

Avsari characters cannot use item weapons of any kind; they rely only on their plasma sword. 

''12.4 TREASURES''

''a. General: ''

Treasures are special items. Some have peculiar effects that may be used by the characters who own them. Others have no special effect, but they are valuable by themselves. Treasures appear when instructed by a Stellar Event, and are represented by a counter which is placed on a particular location, and a card.

''b. Placing a Treasure: ''

When a treasure appears in the game, its counter must be placed on the surface of a RaS planet (using the Planet Random Selection table).

''c. Picking a Treasure: ''

A treasure

that has appeared in the game may be picked up by an Action team spending an extrinsic activity step in the item's location. A d6 must be rolled, and the treasure is acquired on a roll of 1-5. On a 6 the team failed to retrieve the object, but may try again by rolling a new d6 and consuming another extrinsic activity step. If all fails, a different team can still try to pick the treasure in the same Missions phase.

Notice that since the Rebels move first in the Missions stage, they will normally have the first shot at picking up a treasure. This is an advantage intended by the game's designer.

''d. Quest: ''

Most treasures have a quest

involved, in that they must be taken somewhere or to someone. Once the destination is reached, the treasure disappears from the game and usually great benefits are given to the side that delivered it. Delivering a treasure consumes an extrinsic activity step.

Some "quest treasures" cause your side a penalty if you delay in delivering them.

!''13. UNREST, REBELLION ANDPLANET CONTROL''

The Rebel player's aim is to provoke planets into rebellion, which means that their populace has risen and will give what it can to defeat the Imperium. Eventually the Rebel hopes to gain complete dominion of the planet, which requires not only popular acceptance but also absolute control over all of its military and political institutions. The Imperial player, on the other hand, endeavors to maintain his tyrannical rule over all his subject worlds.

''13.1 PLANETARY UNREST''

''a. Planet Unrest Level: ''

The Unrest box of a planet is used to place a marker which indicates the level of unrest

against the Empire among the people. The extreme pro-Imperial level is -3, which indicates quite a fanatical disposition in favor of the Emperor. The opposite unrest extreme is +3, where the population is on the brink of rebellion. The existence of an unrest marker is by itself an indication of Imperial ownership, however unrestful the planet may be.

Notice that the -4/+4 markers do not apply to unrest. They are used only for sovereign/faction commitment.

The number on the Unrest marker is used in a number of game functions, usually as a modifier. When a planet is in +3 unrest, the Rebel player may try to spark a rebellion. Unrest does not apply to Concordance-owned planets; they are simply loyal to the Concordance.

''b. Modifying the Unrest Level: ''

The unrest level of each planet at the beginning of the game is defined by the scenario instructions (printed on the map, for the Campaign scenario). During play, the marker may be modified as a result of Propaganda & Diplomacy or Coup d'Etat missions that the players' Action teams undertake, as well as some random events and other game functions like taxation. If the counter's value is lowered, it is being modified in the Imperial player's favor; if increased, in the Rebel player's favor. A marker already at -3 cannot be modified further in the Imperial's favor; likewise, a marker at +3 cannot be modified further in the Rebel's favor through the means described above. 

''c. Substituting the Unrest Marker: ''

When a planet goes into rebellion, the Unrest marker is substituted with a Rebellion marker on the Unrest box. 

''13.2 REBELLIONS''

''a. How a Rebellion is Started: ''

The Rebel player may assign the Spark Rebellion mission to an Action team. A success will cause a planet to enter rebellion

(with varying results depending on the level of success). A rebellion

may only be started in a planet at Unrest level +3. 

Some random events and other factors may increase a planet's unrest. In some cases, if the modification would move the unrest above +3, rebellion occurs; in others, rebellion cannot occur and the unrest remains at +3 even if the modification would have increased it further. In every instance, the event will specify which case applies.

''b. Effects of Rebellion: ''

The Imperial player loses control of the planet, but the Rebel doesn't control it yet. The Rebel player receives forces on the planet with a cost equal to the planet's Resources value. The Rebel player also receives the same quantity of rp for his Resources track (effectively the Rebel player gets double the Resources value in points; half to spend on site, and half for his track). Finally, the rebellion will probably produce a Shockwave Effect (see section 15).

A planet in rebellion is in turmoil. Therefore, nobody controls nor owns the planet. The GDN may not be attacked by any player since it can't be considered an "enemy". A substantial portion of the population has risen to oppose the government that they see as oppressor, but they have not been able to wrest control of basic institutions like the police. There may be other factions as well that are trying to oppose the rebellious populace.

''c. Military Forces: ''

In a rebellion the Rebel player may place on the surface or on the orbit box military units whose total cost in rp does not exceed the Resources value of that planet (modified by the level of success in the SpR mission). 

Any ground troops that appear must be of the planet's environmental type (except for militia, which does not have a special type) and must be placed on the surface. Exception: If the Rebel does not have enough unbuilt unit counters of the planet's type to build the required minimum of ground troops (i.e. half  of the resources value),  he may buy City- or Natural-type units to fulfill (but not exceed) the difference.

Starships may be built in orbit even if Imperial starships are present there. Starships may also be built on the surface, at the player's choice.

Builds from a rebellion cannot be Elite ground units or  capital starships (these may only be built at the Rebel major secret base). At least half of the rp must be used to buy ground military units (this limitation is NA to space stations). 

Only militia, heavy starfighters and/or corvettes can be built when a deep-space station goes into rebellion.

Example: The planet Neogea 252 goes into rebellion. The Rebel may buy military units not in excess of 26 rp, the planet's Resources value. They can be ground units of City type (except Elite), and/or light starships. At least 13 rp must be spent on ground units; the rest as the player sees fit. Ground units must be placed on the surface, while starships can be placed on the surface or in orbit. 

''d. Special Rebellion Combat: ''

When a planet goes into rebellion and Rebel forces appear, the Rebel player may use them to attack in the Rebellion Combat

phase that follows. Surface Combat is optional, but if starships appear in an orbit box and there are Imperials present there, Space Combat would be mandatory.

Rebellion Combat is resolved as any other similar combat, except that the Rebel forces get automatic surprise over the Imperials (and they cannot be surprised). Rebellion units can declare retreat (Hasty or Prepared) in the first combat round only if they roll a 3 or less on a d10. On a 4 or more they can only declare retreat in subsequent combat rounds (without need of further die rolling).

If there are no Imperial units present in a box (surface or orbit) where Rebel units eligible for Rebellion Combat appeared, the player has the option of trying to evacuate them by rolling 3 or less on a d10. This is handled as a disengagement from a combat, with the units going to another same-system planet or the off-course box. On a 4 or more, the troops cannot be evacuated (except by moving or retreating normally in future phases).

If rebellion-generated troops are unopposed, they may be deluded into thinking that they can defend their newly-liberated planet and will not heed the High Command's "suggestion" to flee and fight another day. What's the purpose of rebelling if you're not going to defend your home?

As long as some Rebel units have just appeared from a rebellion and are eligible for Rebellion Combat, any other Rebel units present in the same box may participate in the combat and enjoy all the benefits that the newcomers enjoy.

''e. Civil War: ''

A partial success in the Spark Rebellion mission will result in a Civil War

; this implies that pro-Imperial sympathizers rallied on the planet and rose to confront the rebellion, with a bloody "brother against brother" conflict ensuing. The planet does go into rebellion, but a Civil War marker is placed upon the Rebellion marker.

The Rebel player gets only half (fru) of the rp of the planet, both for local builds and for his track. The Imperial player may build forces on the planet using the other half of the rp, but only locally; he gets no points for his track. Like the Rebel's, these forces may not be elite or capital ships. The Rebel will not enjoy automatic surprise over the Imperial in the upcoming Rebellion Combat. 

The first side that manages to clear the planet's surface from enemy troops will get the upper hand. The Rebel will get first shot at this due to the upcoming Rebellion Combat phase, but given the circumstances it might be a challenge. If the Rebel wins, the Civil War marker is removed and the planet is in (normal) rebellion thereafter. If the Imperial wins, however, the rebellion is quashed. Place an unrest +3 marker instead of the Rebellion marker, and a Pacified marker on the planet.  A 2
^^
nd
^^
degree Imperial SWE does occur from this quashed rebellion.

In the rare case that both sides eliminate each other, the advantage will go to the first side that can bring a ground unit to the planet.

''f. From Rebellion to Concordance: ''

During a Concordance

Allegiance phase, if a planet in rebellion has no Imperial ground units on its surface, it will become owned by the Concordance. Units in the Orbit box are not relevant. 

The rebellion marker is flipped over to the Concordance side, which remains on the unrest box. Remove any coup markers.

If a planet in rebellion becomes a Concordance-owned planet, it will never leave that state. The Imperial player might occupy it, or perhaps even destroy it, but he cannot try to "quash the rebellion" on a Concordance planet. 

The planet is now officially part of the Free Concordance of Planets. A new nation is born. If the Imperial forces come, they are no longer considered to be the oppressive army of //our// country, but a foreign invader.  

''13.3 QUASHED REBELLIONS AND PACIFICATION''

''a. Quashing a Rebellion: ''

The Imperial player may use military forces on a planet that is currently in rebellion

to try to quash it to the extent that the planet may again be considered to be more or less under Imperial control, under a military governor. It is not enough to bluntly occupy a planet in order to stop a status of rebellion; the enemy's presence might actually just enrage the people more. This represents an attempt to intelligently (albeit violently) pacify the planet by striking at the roots of rebellion and suppressing all its effects. 

It is performed during the Surface Combat segment and may only be attempted if there were no Rebel ground units on the planet since the beginning of the Military Ops stage.

A Pacification number

(PN) must be calculated by adding a number of factors and modifiers as follows: 

''+x''

	The leader's COM halved (frd).

''+1''

	If the majority of Imperial ground units present is Elite.

''-x	''

The planet's environmental size minus the number of Imperial legion-size ground units present (two brigades count as a legion).

''+1''

	If a full blockade is in effect.

''+1	''

Moloch in orbit over the planet (cumulative with the modifier given below).

''+2''

	If the Moloch has destroyed a planet(s) previously and it's in orbit over the planet.

If equal to or less than the PN is rolled with a d20, the rebellion is quashed. If the roll fails by a difference greater than six, the  population is alienated and a cumulative +1 drm will apply to future attempts (mark it with a hit marker under the Rebellion marker).

''b. Pacification: ''

When the Imperial player manages to quash a rebellion on a planet, the Rebellion marker is replaced with an unrest +3 marker; the planet is in Imperial control again, but a "Pacified

" marker is placed on the planet to denote its restricted (for both sides) status. 

A pacified planet will not grant any rp to the Rebel if he sparks a new rebellion there, but SWE's apply normally. The Pacified marker is removed if a new rebellion occurs, but it would have to be replaced if it was quashed again. There is no limit to how many times a planet can switch from one state to the other. 

The maximum taxation that the Imperial can get from a pacified planet is 50%, but that is considered a surtax and will cause an automatic unrest increase. If the Imperial player does not tax the planet at all,  the unrest will not be altered. 

If a pacified planet is without Imperial ground units on its surface during a Concordance Allegiance phase, its unrest is increased in one. If already at +3, the planet goes into rebellion again.

The Pacified marker is removed immediately if the Imperial player manages to move the unrest to a negative value (-1 or better). Thereafter the planet has returned to complete normalcy, as it was at the beginning of the game. It can be taxed normally, the Rebel will get rp if he manages to cause a new rebellion there, and absence of Imperial ground units will not cause any unrest shifts.

When a planet is in Pacified state the Imperial forces have managed to impose a tense calm. There is a semblance of normalcy, but substantial portions of the population refuse to collaborate. The military may have to assume some of the public services and functions, because many of the regular employees won't come to work. The soldiers are still frequently being ambushed or murdered, and terrorism by both sides becomes a factor.  

''13.4 PLANET CONTROL''

''a. General: ''

A planet

may be controlled by the Imperial player, by the Rebel player, or by neither. A player who controls a planet also controls its GDN and his characters are in less danger there. Control is dependent on who officially owns the planet, which player has units there, and whether there is a rebellion or not.

A planet may be in one of five states (in decreasing order of "Imperialism"):
<ul> <li>*Imperial control
<li>*Imperial ownership, under occupation
<li>*Rebellion
<li>*Rebel ownership, under occupation
<li>*Rebel control
</ul> 

''b. Control: ''

Only in the states of Imperial control and Rebel control is a planet fully controlled by a player. In all the other states no one controls the planet for game (including victory determination) purposes. In general, a planet is controlled if the appropriate marker (unrest for the Imperial, Concordance for the Rebel) exists and there are no unopposed enemy ground units on the planet surface. Even a puny garrison unit on a planet is enough to keep control of it in the face of an invading enemy army. An able GDN (level 0 or greater) is equivalent to a ground unit for this purpose. 

''c. Ownership, Under Occupation: ''

A planet may still belong to a player, but be occupied by enemy forces. Occupation

occurs when the appropriate (unrest/Concordance) marker exists, indicating ownership of the planet, but enemy troops occupy the surface and there are no friendly ground units or an able GDN to oppose them. Units in the Orbit box are not relevant to planet control. In this case the owning player does not "control" the planet, but it will revert to him as soon as he can evict the enemy troops or contest the planet with at least one unit. Neither does the occupant control the planet; the people are still loyal to the planet "owner" and pay only lip service, if any, to the army of occupation.

''d. Other Occupation:''

A planet in rebellion is considered to be "occupied" by the side that has unopposed ground units there. This may be relevant for a number of game functions. 

''e. Blockade: ''

Enemy starships in orbit or even a blockade

do not have an effect on a planet's control status, but a blockade may impede taxation or unit building/repair on that planet. Imperial blockade does not prevent Rebel units from being created as a result of a rebellion, or rebellion rp from being added to the Rebel Resources track.

!''14. GAME ECONOMICS''

''14.1 RESOURCE POINTS''

''a. General: ''

The basic economic unit in DWTE is the resource point

(rp), which is collected directly from friendly planets in the form of taxes or "donations to the cause" (please don't say taxes to a Rebel patriot...) Resource points are used directly to buy the big stuff of the game; starships, armies, and so on. The rp available to a player are noted by sliding the appropriate markers on the respective Resources tracks, as points are added or subtracted. There is even a mini-track to keep record of odd half-points.

''b. Limits: ''

Each player may accumulate as many as 299.5 rp. Force points received when a track is full must be spent immediately or they are lost.

''c. Countermix: ''

The counters 

available in the game set a limitation on the units that can be built.

''14.2 STELLAR CREDITS''

''a. Exchange: ''

For the small stuff of the game, characters need cash: Stellar credits. These are represented by "play money" paper bills similar to those of //Monopoly// . Money can be obtained by using the Raise Money mission, or sometimes by lucky random events. More frequently, however, each player's Central Command (which is the entity that controls Action Teams on the field and assigns them missions) will issue characters money obtained from the Treasury by converting resource points to stellar credits

. Each rp will generate 1,000 sc for Central Command's cashier. Stellar credits cannot be converted back into resource points.

A resource point represents a much greater value than 1,000 credits. The exchange rate is given only as a means to generate small change, and it can be considered a loss. It is not a good idea to turn too many resource points into cash.

Rp's may be converted to stellar credits at the end of the Resources and Builds phase, and this depends on the reserve points left on the track. No more than 10% (fru to the nearest whole rp) of the reserve may be exchanged in each phase.

''b. Cashier:''

Each player keeps his cash at one side of the mapboard representing Central Command's cashier

. Money that neither cashier owns and is out of play should be put aside in a "bank". In the Team organization segment of the Missions phase, the cashier (i.e. the player) may assign his money to any or all of his teams by making a separate "purse" and placing it under each team's character cards. During a mission a team may gain or lose money, and their purse is adjusted accordingly.

''d. Shopping for Spaceships: ''

During the Preliminary step the team might be authorized by Central 

Command to acquire a new spaceship using its purse money. The Spaceship Costs chart defines the price of all spaceships. This price is augmented in 10% (fru) for every distance factor from the planet the team occupies to the same district's capital. (Exceptions: Distance is not applicable to the Viper mk III, to the Solarian Disk on Solaria, or to the Avsari Transport on Avsar II). Before you can buy the ship, however, there is a chance that the one you want isn't even available! The probability of this is equal to the overprice you just calculated, plus a rarity factor given for each spaceship on the Spaceship Costs chart. 

If a given spaceship model was determined to be unavailable, no one can buy it on that planet during this Action segment, but the team can try again immediately with another model. Of course, you can't even try to buy a ship if it isn't present in the deck to begin with.

The Viper Mk III spaceship may only be bought at a Rebel secret base (and it is the only ChS that can be bought there).

When you buy a new ship, you have the option of cashing in the old one at half its value (including the possible price increase due to distance).

Suppose a team is trying to buy a Ragnari Clipper with a price of 2500 credits on Ignis IV. This planet is 4 distance factors away from the capital of Armes district, Batres 211. Therefore, the item's price is raised by 40% and it costs 3500 credits! Furthermore, even before buying, the team needs to check if the item is available; there is a 40-10=30% chance that it isn't. A 24 is rolled, so no luck. The characters do need a new spaceship, so they immediately shop for a Sirius 7000. Its basic price is 1000 sc increased to 1400 sc for distance. The chance of not finding one is 40-30=10%, but a d% roll of 66 closes the deal... 

''e. Bribes:''

In the Final step of an Action segment, a team may use its purse to "lubricate the gears" of the mission by well placed bribes. There is a "bribe ceiling" defined in every mission's profile, which is the maximum FASC modifier that can be attained for this mission by bribes. 

Normally every 100 sc grant a +1 FASC modifier, but if the value given for the mission in its profile is in parenthesis, you need to spend 200 sc to get a +1 modifier. 

A team leader may give fractions of 100 sc in a bribe, but it is not certain that it will get a modifier from that fraction. To do so, the fraction spent or less must be rolled on a d%. For example, a team spends 145 sc on bribes. It will get a +1 for sure, and there is a 45% chance of getting a second +1 thanks to the fraction. 

If the bribe ceiling is in parenthesis, halve the fraction (of 200 sc) , fru, before rolling the d% (see 11.5.a). 

The expense not necessarily represents a bribe or gift, but it could be the acquisition of some paraphernalia useful to the mission, like costumes or explosives; but the term "bribes" is used as a generic. 

''f. End of Mission Returns: ''

At the end of a Missions phase the team leaders must return to the cashier whatever monies they have left in the team's purse (unless they are continuing the mission). However, in the case of Imperial teams 10% (fru) of the money a team returns is lost because it "gets stuck" in the characters' pockets (well, they wouldn't be good Imperials if they weren't corrupt).

If a team is wiped out (everyone killed or captured) any cash it carried is lost. Likewise if all the team is jailed.

''14.3 IMPERIAL TAXATION''

''a. General: ''

The game turn track is color-coded. The color of the current turn's box indicates which district is to be taxed on this turn, by matching it with the background color of the district's name that appears on the map. For instance, Armes district, color green, is taxed on turns 3, 9, 15, 21 and 27.

During the R&B phase the Imperial player may tax every planet he controls in the designated district. 

''b. Stellar Tax Rate: ''

The basic or "stellar" tax rate throughout the Empire is 50%. This means that when a planet is to be taxed, it will generate rp equal to one-half of its Resources value (fru).

''c. Surtaxes: ''

At the moment of taxing an individual planet, the Imperial player may apply surtax above and beyond the stellar tax rate. The player gets the full resources value of the planet, but its unrest increases in one level.

Surtaxes are especially offensive, since they can be perceived as a great injustice. Why should WE be paying more than the next planet? 

''d. Tax Exemption:''

At the moment of taxing an individual planet, the Imperial player may declare a tax exemption. The players gets no rp from the planet, but its unrest decreases one level.  

''e. Limitations:''

A planet that is not in Imperial control may not be taxed. A planet that is under Rebel full blockade may not be taxed. 

If the capital of a district is not in Imperial control or it is under Rebel full blockade, no planet in that district may be taxed.

The Imperial player may not claim an unrest decrease for "not taxing" under any of these circumstances.

''f. Tax Rebellion:''

If an unrest increase caused by a surtax takes the unrest level above +3, rebellion does occur.

''g. Extraordinary Sources: ''

The Imperial player receives a constant flow of rp from several secret facilities (17.2) and sometimes from friendly minor factions.

If Earth 111 is not in Imperial control or is under Rebel full blockade, the Imperial may not receive any resource points from extraordinary sources.

''14.4 REBEL "TAXATION"''

''a. General: ''

Once the Rebel player begins to hold planets firmly under his control, he may begin to receive "voluntary contributions for the revolution" from them (apart from the rp received when they went into rebellion). 

A planet may be taxed by the Rebel only if it is controlled by the Concordance, and not blockaded, on a game turn in which Central district is taxed by the Empire. The Rebel secret planet, New Hope, can also be taxed.

The Rebel side has a fair, flat tax rate of 25% (1/4 of the Resources value, fru) and cannot modify it.

''14.5 IMPERIAL BUILDS & UPKEEP''

''a. General: ''

During the R&B phase, the Imperial player may spend rp from his Resources track to build

military units and to upgrade GDN's. There are other expenses as well, such as paying elite unit upkeep. The player must pay for all this in accordance to the costs listed in the Resource Point Costs chart. 

''b. Military Units: ''

New military units must be placed on the surface or orbit box of the capital of the district currently being taxed and/or on Earth 111, provided that it is under friendly control and not fully blockaded by the enemy.  Furthermore, the presence of any enemy starships in the orbit box of a capital, even if not in blockade, prevents the building of starships in orbit. 

The maximum number of military units (both ground and starship) that may be built in a given capital is equal to that planet's environmental size factor. For instance, you can only build 9 units on Batres 311 (9 units total; not 9 ground and 9 starships).

''c. Unrestricted Conscript Builds: ''

In every R&B phase the Imperial player may build conscripts on one or more unblockaded planets he controls, even if they are not in the district currently being taxed.  No more than one conscript may be built on a given planet in a given R&B phase, but they may be built on any number of eligible planets.

''d. GDN:''

GDN's may be upgraded in level on planets of the taxed district and/or Earth 111, provided that they are under friendly control and not fully blockaded by the enemy. The cost for upgrading a GDN to a new level is 4 rp, except the first level (from nothing to level 0) which costs only 1 rp.

''e. Upkeep:''

In every R&B phase, before spending on anything else, the Imperial player must pay 0.5 rp for every elite ground unit, SF detachment, Dreadnought-type battlestar, Moloch, Yellow or Red Alert, and level 3 GDN he owns, to upkeep

it. He can't refuse this payment; if he has the rp, he must spend them. If he lacks the rp, he must downgrade the ones he can't pay for (his choice of which) as follows: A stormtrooper becomes a first-line legion. A GDN decreases one level. Star Marines, Imperial Guard, Draconian Mercenaries, SF detachments, Moloch and dreadnoughts are put in damaged status; if already in damaged status they are eliminated. An Alert is reduced one level.  

''f. Alert Conditions: ''

The Imperial has to pay 1 (2) rp to declare a Yellow (Red) Alert condition. Alert upkeep need not be paid in the same R&B phase in which it is increased.

''14.6 REBEL BUILDS''

''a. General: ''

During the R&B phase, the Rebel player may spend rp from his track to build military units and to upgrade GDN's, and to build

his minor secret bases. He has no district restrictions on spending. He may upgrade his GDN's everywhere (provided that they are under his control and the planet is not fully blockaded by the enemy). His military units may appear at his secret bases, or in Rebel-controlled unblockaded planets. 

''b. Builds on Rebel-controlled Planets: ''

The Rebel player may spend rp to build a maximum of one military unit per R&B phase on Rebel-controlled planets that are not under enemy occupation or blockaded. He may build one military unit on each such planet (except Avsar II).  

New military units built on a planet must be placed on the surface or orbit box of that planet. Ground units must be of the planet's environmental type (unless they are militia). No elite ground units or capital ships may be built.

The presence of enemy starships in the orbit box, even if not in blockade, prevents the building of starships in orbit. 

The Rebel are limited on the Deep-space stations Hyper-Alpha and Hyper-Omega to build only militia, heavy starfighters or corvettes. This limit applies both for rebellions and for R&B phase builds. 

''c. Builds on Rebel Minor Secret Bases: ''

The Rebel player may spend rp to build a maximum of one military unit on a Rebel minor secret base. He may build only one military unit on a minor base 

//per R&B phase//, not one per base. New military units built on a minor base must be placed on the base's box of the Rebel Display (out of view of the Imperial player). Ground units may be of any environmental type. No militia, elite ground units or capital ships may be built.

''d. Builds on the Rebel Major Secret Base:''

The Rebel player may build each turn up to 4 military units (ground and starship) of any type on the planet New Hope, his Rebel major secret base. Ground units built here can be of any environmental type that the Rebel player wishes (if available in the countermix), or militia. Elite ground and capital starships may be built.

Given the limited output of the New Hope shipyards, the Rebel should plan to gradually build up his force in anticipation of his Great Invasion (or in the worst case, an Imperial crackdown on the secret base). 

''14.7 REPAIRS''

''a. General: ''

During the Repairs phase, both players may effect repairs

on their damaged military units, by expending 0.5 rp per hit.  

To be repaired, a starship must be in an orbit box (or, in the case of light starships, they may also be landed) of a friendly-controlled planet that contains no enemy units and is not under full blockade. 

To refit, a ground unit must be on the surface of a friendly-controlled planet that contains no enemy units and that is not under full blockade. 

Imperial units in any district may be repaired, even if it is not currently being taxed.

Rebel units may also be repaired at major and minor secret bases. 

GDN's with hits are repaired completely at no cost in rp, if the local conditions allow it (see 9.1.b).

Players should be careful to mantain a reserve of rp for unforeseen repairs that they may need to perform at the end of a turn. 

!''15. SHOCKWAVE EFFECTS''

People place their loyalties at different levels, in ever-increasing circles of what they consider "their own". Family, neighborhood, school, city, country, continent, planet... Loyalty can also be based on equalizing conditions: race, religion, political standing, or favorite sports team. When insult or injury is applied to another group of people that we consider "of ours", we are worried, shaken, shocked, and perhaps even outraged. 

A similar phenomenon is seen in the game, where events on one planet will impact on those related to it. The population of a planet may be moved if something good or bad happens to another planet in the same system, or if the event is important enough, perhaps in the same district. More important, however, are the effects on those of the same race, even if they are far away. Each race has a sense of species loyalty and will put the affairs of its own kind before events in the Empire as a whole. Consider, for instance, the case of Russia and Serbia. The Serbs are closely related to the Russians by race, culture and religion. Even though separated by many miles and by whole countries that do not share their familiarity, Russia will take keen interest and jump to the aid of Serbia in times of need. Such an event sparked World War I when Russia was moved to intervene in behalf of Serbia against the aggression of Austria-Hungary. 

''15.1 GENERAL''

''a. Definition''

: The Shockwave effect

(SWE) represents the reaction of one planet's populace to occurrences taking place in another that is either in the same star system, or that is populated by members of the same race. The planet giving rise to the SWE is the generator, and the one that could possibly be affected is the receptor. 

''b. Originating Causes: ''

An SWE can be Rebel or Imperial, depending on which side benefits from it. Every event that might produce an SWE has a degree determined for it (1
^^
st
^^
, 2
^^nd</span>^^
or 3
^^
rd
^^
), which is a measure of its importance. 

__1__
^^
__st__
^^
__ Degree SWE__

:

If a planet's unrest level is modified two levels in favor of the phasing player as a result a single mission or event. If the unrest increased, it is a Rebel SWE; and if it decreased, it is an Imperial SWE.

__2__
^^
__nd__
^^
__ Degree SWE__

: Causes of 2
^^
nd
^^
degree SWE's:
<ul> <li>*If a planet's unrest level is modified three or more levels in favor of the phasing player as a result a single mission or event. If the unrest increases, it is a Rebel SWE; and if it decreases, it is Imperial.
<li>*If a planet enters rebellion (Rebel SWE).
<li>*If a planet has a rebellion quashed (Imperial SWE).
</ul> 

__3__
^^
__rd__
^^
__ Degree SWE__

:  Causes of 3
^^
rd
^^
degree SWE's:
<ul> <li>*If a planet becomes Concordance-owned (Rebel SWE).
<li>*If a planet is destroyed by the Moloch (Rebel SWE).
</ul> 

''b. Unrest Shifts:''

The net result of an SWE is to produce unrest shifts on a number of target planets. The shift consists of increasing or decreasing the target planet's unrest by one level (increase in a Rebel SWE, decrease in an Imperial SWE). The Shockwave Effects chart defines how many planets may be targeted depending on the degree of the SWE and the characteristics of the generating planet. An SWE may affect a number of planets in the same star system, plus a number of planets of the same race anywhere in the Empire, plus a number of planets in the same district. If a planet contains more than one race, each may separately affect planets of the same race. For instance, a 2
^^
nd
^^
degree SWE on a planet containing Aquarians and Solarians could affect for reasons of race two Aquarian planets //and// two Solarian planets.

The planets to be affected by an SWE are randomly determined among those eligible. A planet is eligible only if it can conceivably suffer an unrest shift (or go into rebellion) from that SWE. 

A planet may not be chosen twice in the same SWE, therefore a given planet will never receive more than one unrest shift from the same SWE even if more than one connection (such as same system, same race, or same district) exists between the generator and the receptor.

The planets affected for the reason of being in the same system are determined first, then those affected for reasons of race, and finally those affected by being in the same district. Being chosen in one RaS automatically leaves a planet out of a subsequent selection for the same SWE, since it can only be affected once.

Example: The planet Draconis II 221 goes into Concordance (3rd degree SWE).  The Shockwave Effects Chart indicates that this can affect up to two planets of the same system, two planets of the same race, and one of the same district.

First the same-system planets are selected. There is only one, Draconis III, so there is no need of a RaS; it is selected. The second possible shift for a same-system planet is lost, since none more exist. 

Second, the two planets affected by being of the same race (Drak) are selected. The following planets are inhabited by Draks aside from the generator planet (Draconis II):

Draconis III 222, Pindi 212, Neogea 252, Gotica 542, Morin 651 (already in rebellion) and Tolkin 652 ( in Concordance allegiance).

Draconis III is not eligible because it already has been chosen for a shift in this SWE. Morin is not eligible because it is already in rebellion, and Tolkin is not eligible because it is already in Concordance and cannot be affected. This leaves Pindi, Neogea and Gotica. RaS indicates that Pindi and Neogea are affected.

Finally, the planet that will be affected for reasons of same district must be chosen. Notice that Draconis III, Pindi and Neogea, although belonging to the same district, must be left out of the last RaS because they have been selected previously.  This leaves five planets in Sakayama district that could be included in the drawing, provided that none of them has other reasons for being ineligible.  Let us suppose that Vulcan 251 is selected.

The planets that will suffer unrest shifts from Draconis II's SWE are then: Draconis III, Pindi, Neogea and Vulcan.  

''c. Limitations and Special Effects: ''

An Imperial SWE cannot affect a planet already at unrest level -3. 

A Rebel 1
^^
st 
^^
or 2
^^
nd
^^
degree SWE cannot affect a planet at unrest level +3. 

A Rebel 3
^^
rd
^^
degree SWE will cause rebellion on a planet at unrest level +3. 

SWE's have no effect at all on planets already in rebellion or Concordance ownership.

''d. Capitals: ''

Capitals

may be randomly selected as SWE receptors for causes of system, race or district, but there is a chance that they will not be affected (being harder to sway). A d6 must be rolled for each such planet, and the result must be equal to or less than the SWE's degree for an unrest shift to happen. If the attempt fails, the opportunity is lost.
<ul> <li>*A -1 drm applies if the Capital was named because of an SWE originated in the same star system.
<li>*A -2 drm applies to a periphery district Capital's die roll if Earth is originating the SWE.
<li>*Loyalist Imperial Capitals are resistant to Rebel SWE's; a +1 drm applies to the die roll in Rebel SWE's targeting them.
<li>*Haughty Earth is especially impervious to the happenings of "the provinces". A +1 drm applies to the die roll for both players. 
<li>*A die roll of '1' is always successful regardless of modifiers.
</ul>  

Example: Suppose the Rebel caused Ganymede 113 to go into rebellion (2
^^nd</span>^^
degree), and Earth is selected as a target for the SWE. A 2 or less is needed on a d6 due to the 2
^^
nd
^^
degree, but a -1 drm applies for SWE origin in the same system, a +1 for a Rebel SWE against a Capital, and a +1 for Earth's haughtiness. The net drm is -1+1+1=+1, and an unrest shift will occur only on a d6 roll of 1.

''e. Motherworlds: ''

A Motherworld

may be randomly selected as an SWE receptor for cause of same race, but there is a chance that it will not be affected (since its population looks down on "the colonies"). If a Motherworld is named as an SWE target for reasons of race a d6 must be rolled, and the result must be equal to or less than double the SWE's degree for an unrest shift to happen. This means that a 3
^^
rd
^^
degree SWE is automatically successful, a 2
^^
nd
^^
degree needs a 4 or less, and a 1
^^
st
^^
degree a 2 or less. If the attempt fails, the opportunity is lost.

Motherworlds are swayed normally (without need of rolling a die) if named for reasons of same system or same district.

When Earth is chosen in an SWE for reasons of race, its status as a capital takes precedence over its status as a Motherworld, and the possible shift is resolved as per 15.1.d. 

''f. Deep-Space Stations: ''

The space stations are veritable towers of Babylon in the sense that they are inhabited by an heterogeneous mix of all races, none of which has enough predominance to be mentioned and have an effect on the game. However, there is a solidarity between the people of both locations, who sometimes call themselves "stationites". An SWE originating in one station can treat the other as if it were of the same "race".

''g.''

''Chain Reaction: ''

The results of an SWE take place immediately. Rebellions caused by a Rebel 3
^^
rd
^^
degree SWE in the Concordance Allegiance phase of the Final stage will generate a new wave of 2
^^
nd
^^
degree SWE's which are resolved in the same phase, but only after all the results of the first SWE are implemented. It is possible for a chain reaction

of cascading effects to occur.

Suppose planet A becomes Concordance-owned in the Concordance Allegiance phase. This generates a Rebel 3
^^
rd
^^
degree SWE which shifts planet B's unrest above +3 (causing rebellion), and also shifts planet C's unrest to +3 and planet D's unrest to +2. 

Planet B's rebellion causes a new 2
^^nd</span>^^
degree SWE which is immediately resolved, and it causes planet D's unrest to move to +3. It cannot affect planet C because it is a 2
^^
nd
^^
degree event and C's unrest is already +3. 

!''16. MINOR FACTIONS''

The major factions of the game are, of course, the Stellar Empire and the Rebel Concordance. However, there are a number of minor factions which exert a measure of power and influence. The players may benefit from bringing a faction to their side, or at least from preventing it from joining the enemy.

''16.1 GENERAL''

''a. Minor Faction Boxes: ''

Each of the ten minor factions

in the game has a box on the mapboard to keep track of its status. Minor faction boxes are placed along the right map edge.

''b. Faction Seat:''

Each minor faction has a planet where its governing or decision-making people can be reached. The seat is where PeF missions against that faction can be performed by Action teams.

''c. Commitment: ''

A minor faction may be either committed or uncommitted. All factions are considered uncommitted at game start.

Every faction has a "commitment level" that goes from -4 to +4. The current level is noted by placing an appropriate marker on the minor faction's box. The initial level existent at game start is defined on that box. Players may modify a faction's commitment level using the Persuade Faction mission. If a commitment level increases, it is in favor of the Rebels, and if it decreases, it is in favor of the Empire.

If a faction reaches a +4 level, it will commit to the Rebels, and if level -4 is reached, it will commit to the Empire. Once committed, factions can no longer be influenced and will remain at the -4/+4 level for the rest of the game.

Every faction has a "commitment range" defined on its box (and below), which reflects its sympathies and how far it will go for one side or the other. The net effect of this limitation is usually that a given faction may only be called to full commitment by one side, or by neither. 

Even if a minor faction has not fully committed to a side, it may give that side certain benefits even at lower commitment levels.

''d. Special Units: ''

Some factions help the side they commit to with military units. These units are always unique in the sense that they can be repaired, but never rebuilt if destroyed.

''16.2 MINOR FACTION PROFILES''

''THE ADIM AGNOT SOCIETY''

''Initial Commitment: -1''

''Commitment Range: -3 to +1''

''Modifiers to PeF Missions: -2 for Rebel missions. ''

The Adim Agnot is a dark sect of assassins named after its founder. They believe that by ritually murdering someone the victim's life essence is added to a sort of "bank account" that will make the killer very powerful in the afterlife. In addition, the victim's soul will be the slave of the assassin.

The Agnot religion is very peculiar. It doesn't do just to kill anyone. It has to be in accord to ritual, and only when the time is right, and the victim must have the appropriate life essence, and it must have a "need to be killed".

The Society accepts solicitations for murder from those few that know how to reach them and who are in their good graces (notably the Empire). They charge dearly for the service (they have expenses you know), but they don't accept just any job as if they were street thugs. First they need to "see the beauty" of the work. Also, the contracts are one-shot affairs. If the adept assigned to the mission fails and dies, the Society, although shamed by the failure, does not consider itself in the obligation to try again (unless a new contract is made).

Adim Agnot adepts spend months, sometimes years, waiting and training for their first assignment. The adept knows that failure means death, by its own hand if need be. Death after having completed the mission successfully is not considered a dishonor or a tragedy, although of course adepts try to avoid it because they want to gain notoriety in the Society, become masters to teach others, and accumulate more life essences to be even more powerful in the netherworld.

As can be imagined, the Adim Agnot are hated everywhere. Imperial agencies make a lot of fuss about all their efforts to suppress them, including the occasional arrests and convictions, but they make use of the Society's services.

''Faction Seat: ''

The Adim Agnot Society is based at a secret Keep located somewhere in the wilds of a planet. This planet is randomly selected at game start, but it cannot be Earth (roll again if it comes up). At start only the Imperial player knows the location of Agnot Keep, but the Rebel can discover it through Esp missions (see chapter 17) or other means. The Keep is where contracts for assassination may be made, and where PeF missions against the Society must be performed. The Society continues to exist and do business as usual even if Agnot Keep's planet is in rebellion or Concordance-owned.

A Rebel player who knows the Keep's location can raid the Society if he has unopposed non-militia ground units on the planet at the beginning of his Surface Combat segment. The Society's commitment level is immediately shifted to -3 and it is suppressed for a number of turns equal to a d6 (handle it like the suppression of a Rebel cell). All current orders are canceled (no refunds). The planet containing the Keep has its unrest increased two levels (not into rebellion), and a 1
^^
st
^^
degree Rebel SWE is initiated (even if the planet's unrest was not actually shifted two levels). Agnot Keep relocates to a new planet, currently unknown to both players.  A random Stellar Event may force the Imperial player to raid the Society, but otherwise he cannot do so voluntarily.

''Commitment:''

The Society will fully commit to neither side, but it tends to be pro-Imperial. The current commitment determines the cost of assassinations, and how many contracts can be active at the same time.

ADIM AGNOT ASSIGNMENTS  <table width="481" cellpadding="14" cellspacing="0"> <col width="223"/>
 <col width="200"/>
 <tr valign="top"> |  ''Commitment Level'' |  ''Possible Contracts ''   |
 |  ''+1'' |  1 Rebel |
 |  ''0'' |  1 each side |
 |  ''-1'' |  1 Imperial |
 |  ''-2'' |  2 Imperial |
 |  ''-3'' |  3 Imperial |

  ''Adim Agnot Contracts: ''  Agnot assassinations can be ordered if Agnot Keep is known to that player's side. A team spending an extrinsic activity step at the Keep can make one or more contracts (within allowed limits), and must pay the cost for the contract (s), which is usually 500 sc. However, a 50 sc discount applies for every level of favorable commitment. For instance, if the commitment is +1, the Rebel player would pay 450 sc for a contract; if the level were -3, the Imperial player would pay only 350 sc.   The target must be an enemy MaC currently in play. The target's name is secretly written down on a piece a paper, to show to the other player when the assignment is resolved. Place an Adim Agnot marker (numbered 1 to 3) of the appropriate color (Rebel or Imperial) on an assignment box of the Adim Agnot Society's minor faction box. No more contracts may be active at the same time than the Society's commitment level allows. Should the commitment shift to a level that allows a player fewer assignments than those that are active, already contracted assassinations remain active, but that side cannot make new contracts if they would exceed the new limits.  During the contractor's Search segment a special Agnot search d10 roll is allowed against each target. This is independent from any normal search. It succeeds on a '1', and permits the assassination attempt if successful. A -1 drm applies if the target is detected. The player need not announce who he is searching for unless he succeeds. The target must be on a planet surface (except a still-secret New Hope or a still-not-in-rebellion Avsar).  An Adim Agnot attempt is resolved as a para-character (11.2.p) Assassination mission, with a base of 4 FASC plus any applicable modifiers. The adept is assumed to have INT=2. After resolution, succeed or fail, the contract is over and the assignment counter is removed from the faction's box.   Adim Agnot attacks are intended to be potshots that only occasionally will bring down a character. The danger although small is real, however, and a player who feels that the Society has become a nuisance should take measures to influence or neutralize them.   ''Rebel Honor: ''  The Rebels are supposed to be the good guys in this conflict, and the Adim Agnot is very evil... Of course, in times of war you use every weapon you can, but if it should ever be known that the rebellion ordered an Agnot assassination, it would be very bad for public relations. Every time a Rebel-contracted Adim Agnot attack occurs against an Imperial character a d6 is rolled. On a roll of '1' Rebel involvement becomes public! Shock, horror and outrage! All the planets of the star system where the attempt occurred have their unrest lowered in one level.  ''THE AVSARI ORDER''

''Initial Commitment: +1''

''Commitment Range: -3 to +4''

''Modifier to PeF Missions: -1 for Imperial missions.''

The Most Noble and Loyal Monastic Order of the Avsari was founded in the year 3 P.S. on the unwelcoming planet Avsar II, as an autonomous, semi-religious organization devoted to the honing of mind, body and spirit in the service of the people of the Empire. 

For centuries, the Avsari have been like the blood of the Empire, helping defend it in case of barbarian invasions, stabilizing it when a menace appeared from within, and upholding justice. They have been a pervasive but usually hidden influence in every aspect of Imperial political life. They are generally respected, but not always loved. Some people actually hate them and call them witches.

The Avsari concentrate on two aspects: Combat skills and wisdom. Both areas are enhanced with the special Avsari mind (psychic) skills that they also develop. Neophytes are recruited as children of nine or ten years (or the equivalent age for non-human races) and the Order becomes their life.

The most notorious aspect of Avsari combat is of course fencing with plasma swords. The Avsari are such experts with this weapon that they can even use it to deflect laser shots. There is probably no opponent more fearsome than an Avsari master with a plasma sword.

The Avsari also practice a form of martial art known as Avsari Weirding. Although it can be used as a standalone unarmed skill, its purpose is mainly to complement the sword, using kicks and hand chops to unbalance the enemy. They also practice the use of all other kinds of weapons and study military strategy and tactics, and each Avsari is expected to have one or more "secondary skills".

Last but not least, Avsari training takes so long because painstaking efforts are made to instill a philosophy of life in the adepts along with the fighting abilities. The idea is to make them wise so they will not use their force for evil purposes or in despair. Unfortunately some Avsari reject this aspect and become "wild", all power and no wisdom. Very dangerous for others and for themselves, the careers of wild Avsari usually end early and tragically.

The Order has not been unaffected by events in the Empire. Inevitably some corruption has reached it, and an increasing number of Avsari are perceived as not being pure in their ideals, or have been turning wild. The training as an Avsari of Pantaleon, Duke of Armes, the Imperial heir, has brought special turmoil to the usually peaceful Avsari Castle. For centuries the Order and the Imperial family had avoided direct entanglement with each other, but when Mas Pantaleon was a child he showed such great potential that it could not go unnoticed, and perhaps the less wise part of the High Council prevailed in allowing his training. Pantaleon is a very powerful Avsari master, and expectedly he has influenced many younger adepts. He is also a bona fide Imperial, and the next Emperor apparent...

The rebellion has brought division to the order, and constant discussions take place in every corridor and training chamber of the Castle. Most Avsari continue to be noble, wise and honorable, and they can't help but be horrified by what the Empire has become. But then, loyalty to the Empire is a tenet of Avsari philosophy. The Constitution of the Avsari Order states that it exists "to defend the people of the Empire". Some Avsari emphasize "people", while others, not necessarily evil, emphasize "Empire".

Technically, the Avsari Order is loyal to the Emperor (who isn't?), but since it is autonomous and not subject to the normal laws, the High Council has avoided any active support regarding the rebellion. Its position is almost that of a neutral third party! Pantaleon IX has already declared in chambers that he finds this lack of commitment "disturbing". A crackdown on Avsar II is expected any day, unless the prince Mas Pantaleon can manage to bring the Order to "order".

''Faction Seat:''

The Avsari Order is unique among the minor factions in that it has a planet all for itself, which is where the minor faction is located for purposes of PeF missions (Avsari Castle). The Avsar district that contains Avsar II is separated from all other districts of the Empire.

Avsar II is treated as any other planet in most aspects. It is an Ice planet with an environmental size of two and zero resources. Applicable missions other than PeF can be performed on it, and it has a monster. The following random events are ignored on Avsar II as long as it has not gone into rebellion (treat as no effect): 03-12, 26-37, 88-93, and 99-100. 38-47 can occur but no search is allowed. After rebellion, only 28-35 cannot occur.

Avsar II has a GDN base that can be upgraded by the Rebel if he ever controls the planet. Instead of an unrest box the planet has an empty box, and there is no coup box.  

Avsar II is not included in the Planet Random Selection table, and therefore is not eligible for placement of treasures, secrets, factions other than the Avsari Order, etc.

Before rebellion, Avsar II is considered a neutral, autonomous ground. Imperial and Rebel military units may not enter the planet's orbit or surface boxes. Enemy teams may not openly search for each other. Once the Avsari Order commits to the Rebels, it becomes a normal planet where any unit can enter and fight, searches can be conducted, etc.

''Commitment: ''

The Avsari Order can never commit to the Empire, but it can be induced to adopt a mostly pro-Imperial stance (level -3). If the Order commits to the Rebels, place a rebellion marker in the empty box. This is not a regular rebellion, and it cannot be quashed by the Empire. However, the marker serves as a reminder that if the planet is cleared of Imperial ground forces during a Concordance Allegiance phase it will become Concordance-owned (place an appropriate marker on the empty box), and the planet counts for initiative and victory. 

A +1 modifier to FASC applies if the mission leader in a PeF mission against the Order is an Avsari master.

''Special Unit: ''

If the Rebel player manages to make the Avsari Order to commit to the rebellion by his own means, the Avsari Legion (8-8) appears. It is formed by thousands of Avsari monks, masters and neophytes organized militarily. And they don't fight only with swords; when going to war they use ranged weapons and heavy support as well. The Avsari Legion is unique and irreplaceable; it cannot be rebuilt if lost. It can be repaired but at the increased cost of 1 rp per hit.

''Crackdown: ''

A Stellar Event may cause the Empire to crack down on the Avsari. This results in immediate commitment and rebellion, as described above. However, when a crackdown occurs instead of a normal commitment, the Avsari Legion usually does not appear. The Rebel side receives 8 rp instead, representing the strength of the dispersed surviving Avsari, who are assumed to be distributed piecemeal among the regular Rebel units. 

''THE BARBARIANS''

''Initial Commitment: 0''

''Commitment Range: -4 to +4''

''Modifiers to PeF Missions: None. ''

Although there are more than a couple of races that have been discovered beyond the borders of the Empire, they have little importance except one: The Minoplisians. These are a humanoid race whose members look like giant, tail-less rats. Originally they inhabited only the planet Minoplis when found by the Empire. They took advantage of a small Imperial colony established on their planet to learn, barter and steal technology, and so have progressed in a couple of centuries into a star-faring race. They have colonized several planets near the fringes of the Empire, and a small colony of Minoplisians has even immigrated to live as "honest merchants" on an Imperial planet, allowed to do so by a generously bribed Imperial Viceroy-governor. In contrast, the Imperial colony on Minoplis was abandoned years ago under veiled threats. The rat barbarians are hated and feared in the entire district bordering their kingdom, and war is always a menace. Clashes have already occurred on occasion.

''Faction Seat: ''

Before the game starts RaS a star system that directly abuts on a map edge, except Avsar, a Travisian system, or the yellow wormhole. This leaves Wolf 23, Canis 25, Ophiucus 33, Altair 34, Ignis 35, Van Mannen 43, Indi 44, Pavonis 45, Kapteyn 53, Ceti 54, Stein 64 and Groombridge 65 as the 12 possible choices. Once you have the system, RaS one of its planets. That unfortunate world contains the despicable Minoplisian Minority, and that is where players can perform the PeF mission against the Barbarians faction.

''Commitment:''

The Barbarians may commit to either side. Commitment implies involvement in the rebellion war, contributing with military units. However, this commitment has a cost, since inviting the hated Barbarians into the conflict is inviting serious trouble, and the move can be offensive to many people. The planet that contains the Minoplisian minority has its unrest level moved two spaces in favor of the opponent of the player who called in the Barbarians (but not into rebellion), and a 1
^^
st
^^
degree SWE is initiated (even if the unrest was not moved two levels).

''Special Units:''

The contribution of the Minoplisians consists of 7 war longships (1-4, light starships) and 3 hordes (3-8, of line/regular quality). Hordes are special units that count as two units for stacking. They are natural-type units even in Imperial service. The hordes do not normally use regular transports; instead, they must be carried by a longship. A horde may use friendly regular transports only if there are no longships left in the game, and then two transports are required to carry it. Barbarians units can be repaired, but cannot be rebuilt if lost. The units appear at the planet with the Minoplisian Minority, in the orbit box.

''THE BOUNTY HUNTERS GUILD''

''Initial Commitment: -2''

''Commitment Range: -3 to 0''

''Modifiers to PeF Missions: -2 for Rebel missions. ''

In an Empire populated by billions and billions of people living on dozens of planets and with a lot of moons, asteroids and nebulae to hide in, it is not unexpected that Imperial forces cannot keep track of every fugitive, criminal or political. Since long ago the policy of putting a price on the heads of wanted people has given origin to the adventurous, potentially profitable, and not altogether dishonorable profession of bounty hunting. After all, they are working for the law and helping to make the Empire a safer place to live in... They even have organized a Guild to see after their affairs and resolve disputes among them.

When the rebellion was born, inevitably the bounty hunters were called upon to track down known Rebel agents and sympathizers. Most hunters took the new situation in stride, although a few have switched sides and joined the rebellion.

The Bounty Hunters Guild is clearly a pro-Imperial institution. Although the Concordance can try to convince them that their services will still be appreciated after a Rebel victory, and attempt to induce them to tone down their hunting of Rebels, the money today comes from the Emperor's faction. And the hunters are people that live for the present.

''Faction Seat:''

The headquarters of the Bounty Hunters Guild is known to all, but its location varies from game to game. At game start a planet is selected (using the Planet Random Selection table) and the Guild HQ marker is placed there. It can be Earth. Guild HQ cannot be affected by players' actions (short of destruction by the Moloch), although if the planet becomes Concordance it will be moved to another RaS planet (that is not Concordance).

''Commitment: ''

The Guild will fully commit to neither side, but it is clearly pro-Imperial. It commitment level applies as a modifier to manhunt die rolls (see below).

''Placing Bounties: ''

The Imperial player activates bounty hunters by placing a bounty of no more than 1000 sc during an R&B phase (after the conversion of rp to sc). Put the bounty money in a separate purse. In every subsequent R&B phase, the Imperial player may "raise the bounties" by adding no more than 1000 sc, adjusting the purse accordingly. If he needs money in a future R&B phase, the Imperial player may take back some or all of the sc that he has placed to activate bounty hunters and return them to his cashier.

In every subsequent R&B phase, before bounties can be raised, the current total placed is reduced in 10%.

For instance, if 1000 sc were placed in the previous turn, 100 sc would be lost and 900 would remain. The player could then add up to 1000 sc, raising the total to 1,900 sc. The next turn, 190 sc would be lost and 1,710 sc would be left, and so on. The money lost is assumed to be spent on lesser enemy agents turned in, administrative expenses and (you guessed) corruption.

For every whole 1,000 sc currently placed as bounties, the Imperial player gets one bounty factor. Fractions of less than 1,000 sc are ignored. For example, if the current bounties offered total is 5,760 sc, the Imperial player can claim five bounty factors. A hit marker of the same value as the current bounty factor value is placed on the Bounty Hunters' Guild minor faction box, under the appropriate counter. The maximum bounty factor value is five, regardless of how much money is currently in the "bounties offered" purse.

If the current bounties offered total is less than 1,000 sc no hit marker is placed and manhunts are not allowed. The residue still suffers 10% reduction each R&B phase.

''Manhunts: ''

A random event during a Rebel mission may spring a manhunt attack by bounty hunters. A d10 is rolled; if the result is equal to or less than the current bounty factors value, the attack occurs. The current commitment level of the Bounty Hunters' Guild is applied to this roll as a modifier. An additional -1 drm also applies if the Rebel team is detected when the event occurs. If the die roll is successful, a second d10 is rolled: 1-4 the attack is an abduction attempt; 5-10 the attack is a raid. 

An abduction attempt is resolved as a para-character (11.2.p) Abd mission against one RaS character, with a base of 4 FASC plus any applicable modifiers. The hunter is assumed to have INT=2. 

A raid is a melee attack by (&frac12; d6 + 1) bounty hunters represented by Imperial elite soldier counters. The raiders enjoy automatic surprise and always use lasers on stun in a capture attempt. 

Any Rebel character captured by either mode of manhunt is immediately spirited away to the district's capital (Batres 311, if it occurred on Avsar II) and turned over to any Imperial military unit or character there (orbit or surface). If the capital is devoid of Imperial units and there is no one to receive the prisoner, it is jailed there (5.5.d) and it is assumed to be already "recognized". 

The Imperial player must immediately pay the manhunters an amount of sc equal to the prisoner's Rank multiplied by 1000. For this purpose he must use the money he has as offered bounties. If this money proves to be insufficient he may add whatever credits the cashier holds. If even this proves not to be enough, the deal is forfeit, the manhunter releases the prisoner in disgust (free but detected on the capital's surface) and the Guild's commitment is increased one level in the Rebel's favor. Payment for bounty hunters may not be made directly from the Resources track.

''Rebel Bounty Hunters: ''

A Stellar event may allow the Rebel player to conduct manhunts. These are resolved exactly as those of the Imperial side, with all the roles reversed. The main difference is that the current commitment level of the Bounty Hunters' Guild is added to the manhunt die roll instead of subtracted. For example, if the commitment is  -2, the Rebel player must add two to his die rolls. The Rebel side may not hire renegade bounty hunters before the Stellar Event allowing that has occured.

Imperial prisoners taken by renegade bounty hunters are taken to the nearest Rebel secret base, where payment as usual is expected. In the case that the Rebel player is unable to pay the bounty, the prisoner would be released, detected, on a planet of the Rebel player's choice within two distance factors of the secret base. The Guild will get wind of the rotten deal and its commitment is decreased in one level. 

''THE COMMERCE FEDERATION''

''Initial Commitment: 0''

''Commitment Range: -4 to 0''

''Modifiers to PeF Missions: -2 for Rebel missions.''

The Commerce Federation represents the interests of the huge corporations, in a heavy-handed way. The Federation works closely with the Imperial government for mutual benefit, which usually means in detriment of the people. Monopolies, monopsomies, dumping of competition, heavy tariff rates on non-Federation products, etc. are among the many things that the Federation protects and stimulates.  

The Commerce Federation has a war of sorts declared against the Free Traders, whom they accuse of smuggling and piracy. The first charge is true, but the second isn't. As in any war, it gets ugly sometimes.

''Faction Seat: ''

The Commerce Federation's Building is located in the capital city of Aurora 421, just across the street from the Stellar Stock Exchange, and holds vast amounts of irreplaceable data about its members and operations, as well as a huge underground vault loaded with hard cash and precious metals. Player's actions cannot affect the ComFed Building short of Aurora going into rebellion. In that case the faction ceases to exist (for game purposes anyway). The Imperial side would no longer receive income from it, but any armed forces that the Federation may have already contributed to the Empire remain in play. It keeps the commitment level it had at the moment, for initiative and victory determination purposes. The Rebel player gets 10 extra rp for his track the first time Aurora goes into rebellion, from looting the Federation's vault. 

''Commitment:''

The Federation is one of the things that are notoriously wrong with the Empire, and the Concordance has avowed to dissolve it. At best, Rebel agents can try to induce it to remain relatively inactive regarding the Empire. At commitment level +1 or greater, the Imperial player receives income from the Commerce Federation's active contributions to the war effort. 

''Special Units:''

If the Federation commits to the Empire, it puts its private army at His Majesty's disposal, which consists of six sloops (1-2) and an android legion (3-4). 

''Income: ''

In every R&B phase the Federation contributes rp to the Imperial player equal to its current commitment level.

''THE FREE TRADERS''

''Initial Commitment: 0''

''Commitment Range: 0 to +4''

''Modifiers to PeF Missions: -2 for Imperial missions.''

The Free Traders are more or less honest merchants who are trying to make a living in the shadow of the Commerce Federation's (and the Empire's) abuses. Most are space wanderers, traveling the space routes carrying merchandise from here to there. Others have planetbound businesses. Given the heavy tariffs and taxes that exist, many resort to smuggling and black marketeering, but not as criminals; they are only helping themselves and the people. Of course, the Empire and the Federation see things in another light.

The Free Traders are not strictly organized, but there is a strong bond of fraternity among them and they have a secret organization. They are everywhere, and news travel fast through their grapevine.

''Faction Seat:''

The location of the extra-official Free Trader Union is unknown to both players at game start, but it can be discovered through espionage missions. It should not be placed until a player has discovered it. This is where PeF missions against the Free Traders can be conducted. Player's actions or political changes cannot affect the seat in any manner (short of destruction by the Moloch).

If the Rebel player has the character Felicity Mahoney, he automatically discovers this faction seat.

''Commitment: ''

The Traders are of course pro-Rebel, and at best the Imperial can bully them into remaining inactive regarding the rebellion (level 0). At increasing levels of commitment, the Rebel side will receive modifiers for Espionage missions and even a modest income.

''Income: ''

The Free Traders contribute to the Rebel cause in every R&B phase &frac12; of their current commitment level (fractions kept). 

''Informers: ''

If the Trader's commitment level is positive (+1 or better),

the Rebel player may apply a modifier to the FASC of all his Espionage missions (anywhere) equal to the level; e.g., commitment +2, modifier +2; commitment +4, modifier +4, etc.

''THE HYPER-MAFIA''

''Initial Commitment: -1''

''Commitment Range: -3 to +3''

''Modifiers to PeF Missions: -1 for Rebel missions. ''

The Hyper-Mafia represents a network of organized crime spanning the Stellar Empire. It is a senate of the crime lords of every planet, which come together to resolve conflicts and "gang wars", agree upon zones of influence, delimit illegal activities, etc. Imagine Al Capone in a space suit. 

As organized crime, the Hyper-Mafia is a plague on society. In times of war, however, you welcome any ally, no matter how unlikely. Making a deal with the mob, of course, involves giving them concessions that you may regret later. Well, we'll worry about that later!

''Faction Seat: ''

The Hyper-Mafia is everywhere, but there is a sort of centralized "government" located in a huge building which is a business fa&ccedil;ade for the most powerful of 'em all, Nikolai Grachenko. When the senate of crime lords meets it is usually at that location. This is where PeF missions against the Hyper-Mafia can be conducted. Player's actions or political changes cannot affect the seat in any manner (short of destruction by the Moloch).

The faction seat of the Hyper-Mafia is unknown to both players at game start, but it can be discovered through espionage missions. It should not be placed until a player has discovered it. 

If the Imperial player has the character Franco Giovanelli, he automatically discovers this faction seat.

''Commitment: ''

The Hyper-Mafia will never fully commit for Rebels or Imperials, but it can become real friendly to either of them. The commitment level translates in income and informers to aid their partners "in business".

''Income: ''

In every R&B phase the Hyper-Mafia contributes a number of rp equal to the current commitment level (ignoring the plus or minus sign), to the side towards which they are currently leaning   (i.e., commitment -1, 1 rp for the Empire; commitment +3, 3 rp for the rebellion, etc.). You might need to launder the money though...

''Informers: ''

The Hyper-Mafia's commitment level (ignoring plus and minus signs) is applied as a positive modifier to all the Espionage missions (anywhere) of the side towards which they are currently leaning. For example, commitment +2, Rebel Esp modifier +2; commitment -3, Imperial Esp modifier +3, etc.

''You Will Regret it Later:''

The Hyper-Mafia's commitment level is reversed at the end of the game for victory determination purposes; i.e., a -2 is considered a +2, a +3 is treated as a -3, etc.

''THE LEGION OF FORTUNE''

''Initial Commitment: 0''

''Commitment Range: -1 to +1''

''Modifiers to PeF Missions: None. ''

The Legion of Fortune is a club of mercenaries formed by veterans of the Imperial armed forces, retired pirates, frustrated bounty hunters and many others who have chosen to live for war, but don't want to be tied down to Imperial hierarchy. They have been tolerated, even encouraged, by the Empire because they represent a source of elite soldiers that can be hired on short notice for situations of dubious nature, without compromising the Army. Aside from their main customer, the LOF's mercenaries are also hired by planetary rulers, colonists and wealthy civilians who need military punch for some purpose. The only customers that they flatly reject are criminals and the Hyper-Mafia. It is not unusual for members to find themselves on opposite sides of a conflict, killing each other. It's all part of the business.

Although frequently fighting for the Empire, it has always been crystal-clear that the Legion of Fortune holds no allegiance. The question of their possible hiring by the rebellion has come up, and the answer has been, "why not?" Even the Empire won't blame the Legion itself for allowing its members to fight for the rebellion, although it will happily kill those mercenaries found in battle.

''Faction Seat: ''

The mercenaries never stay for long in one place. Before the game starts a planet is RaS and the LOF HQ marker is placed there. The LOF Base marker will be moved to a new RaS planet at the beginning of every turn in which the Central District is to be taxed. Should the players forget to move the base on that turn, it can be moved in the turn in which they remember.

LOF Base is where PeF missions against the Legion can be performed, and also where mercenaries can be hired. It cannot be affected by player's actions (except the Moloch). 

''Commitment:''

The narrow range of commitment levels reflects the neutral, mercenary ways of the Legion of Fortune. The +1 or -1 does not represent political sympathy, but merely a slightly favorable disposition towards a side due to nicer treatment or better working conditions offered.

''Special Units: ''

There are three LOF brigades (4-6) for hire. They are considered to be elite. The Empire does not need to pay upkeep for hired LOF brigades (this is already factored into the cost). 

A player may hire a LOF brigade that is currently available by having a team perform an extrinsic activity step at LOF Base, and pay the cost from the team's purse. The basic rate is 6,000 sc for one year (6 game turns) of hiring beginning with this turn; if the current commitment level favors the player, the cost is reduced in 1,000 sc, and if it favors the player's opponent, the cost is increased in 1,000 sc. The appropriate "Contract Ends" marker should be placed on the turn in which the hire ceases and the unit becomes available again. For instance, if a brigade was hired on turn 6, it would serve during turns 6, 7, 8, 9, 10 and 11 and would be free at the beginning of turn 12. Freed brigades are immediately removed from the map and returned to the faction's box. You can't extend a brigade's contract, but would need to re-hire it all over again.

A brigade that has been hired is placed wherever the player wants (on a planet surface or orbit box), not necessarily at LOF Base, but not directly in the same box with enemy military units. LOF brigades may be placed (or moved into) Rebel secret bases without revealing them, because the mercenary soldiers are kept in the holds of their transport and can't see where they are being taken, so they can't talk about it.

LOF brigades can be repaired normally (at the player's expense), but if eliminated the contract ends and the faction's commitment is shifted one level against the player. The brigade will be available again for hire by either player in the same turn that it would have been freed if it had not been eliminated. 

A given brigade may only be hired by one side at a time. Placed the appropriate "hired" counter (Imperial/Rebel), on the space corresponding to that brigade in the Legion of Fortune's faction box.

''THE PIRATE PRINCES''

''Initial Commitment: 0''

''Commitment Range: 0 to +4''

''Modifiers to PeF Missions: -2 for Imperial missions. ''

Pirates seem to be everywhere, but not all are the same. Many are small bands of cruel cutthroats who will kill everyone aboard the spaceships they capture; others can be Robin-Hood types, who justify themselves as products of the tyrannical Imperial system and claim to be helping the poor people. These will probably treat their victims reasonably well as long as they don't resist. Most piratical groups will fall in the middle of these extremes.

Unlike other criminal activities, piracy has never been tolerated by the Empire and it always has been suppressed when possible. In fact, fighting pirates has been one of the few activities that have kept the Imperial forces busy and sharp before the rebellion appeared. As a result, there is a natural enmity between all pirates and the Imperial military. 

A number of pirate bands have united into larger organizations, the most important ones being the Buccaneers of Thergol, the Gonaxian Raiders, the Ragnari Band, the Merry Defenders and the Anomalites. The chief of each band is known as a Prince, and all five groups along with many smaller bands have formed a sort of Pirates Guild in order to discuss common interests, define areas of influence and resolve disputes.

In need of allies, the Rebels have approached the Pirate Princes in a controversial move. The Concordance hardly condones piracy, but as the saying goes, the enemy of my enemy is my friend. The idea is to reach an agreement whereby the Concordance as a "belligerent" gives the Princes letters of marque, in fact turning them into legitimate corsairs fighting in a war. It is understood that after victory they will become honest merchants, because the cause of their "grievances" (the Empire) will no longer exist (ahem). It is also understood that they will refrain from attacking innocent civilians and will concentrate only on attacks against Imperial property. 

The pirates' benefit is that after the war, if the Rebels win, their dirty earnings will be clean. They can steal today and enjoy the loot openly tomorrow. Many pirates do look forward to returning to a normal life, as rich persons and honorable war veterans to boot... 

Both sides suspect that the part about not attacking civilians might not be enforced 100%. Also, a few visionaries on both sides believe that the alliance will necessarily be broken after victory; many pirates will go back to their evil ways, and the Concordance as the new official government will have to fight them. But the fact is that here and now there are great mutual benefits in the agreement. The Rebels are already engaged in a vast propaganda effort to whitewash the Princes and make them appear as heroic freedom fighters...

''Faction Seat: ''

The Pirate Princes' council and main supply base is at a secret Cove located on a satellite, asteroid, or uninhabited planet of an unknown system. 

At game start neither player's faction knows the location of Pirate's Cove, but it can be discovered through Esp missions (see section 17). It should not be placed until a player has discovered it. 

The Rebel side automatically discovers the location if the character Agelat is active.

Once a side has discovered the location, Pirate's Cove is placed on a system's off-course box and that is where PeF missions can be performed. Teams may travel to the Cove; this is an exceptional instance in which you can announce an off-course box as a destination. In normal movement you can only direct units to planets.

Since the action is happening on a small uninhabited location, the random events from the Action Step table caused by the following dice rolls cannot happen and are treated as no effect: 03-27, 36-47, 74-75, 88-93 and 99-100. No search can occur on the Pirate's Cove. When you meet angry civilians, use 2-2 generic monster counters to represent angry pirates; "killed" characters still go to jail instead of being dead, as with other angry civilians. No missions other than PeF are allowed on the pirates' base.  Place visiting characters on the faction's box.

When and if the Pirate Princes commit to the Rebels, Pirate's Cove is treated thereafter as a 6
^^
th
^^
Rebel minor secret base. Rebel units may be sent there, subject to the same stacking limits as other bases (2 ground, 4 light starships). Rebel starships sent here must be landed, as in regular minor bases. The stacking of Rebel ground units is of course affected by the presence of the faction's own ground unit, the Pirate's brigade.  

An Imperial player who has learned the Cove's location can attack it as if it were a Rebel minor secret base (18.2), even if the faction is not yet fully committed. When that happens, the 6 pirate brigs meet the attack in orbit, while the Pirate's brigade (and any Rebel units present) oppose the attack on the surface. Brigs could also be placed landed at the moment of the combat, at the Rebel player's choice, subject to stacking limits. The Cove's environmental size is considered to be 2. The battles are resolved normally.

If at the end of the Imperial Surface Combat segment the Imperial has an unopposed ground unit on the faction's box, the Pirate's Cove is destroyed. The Pirate Princes' commitment level is immediately shifted to +4 if not already there (for initiative and victory determination purposes) and then the faction ceases to exist (in game terms at least). The Rebel player would no longer receive income or random pirate reinforcements in battles, but any military units surviving the raid would be permanently added to the Rebel forces.

''Commitment: ''

The pirates can never be pro-Imperial; at best, the Imperial player can induce them to be inactive regarding the rebellion (level 0). At commitment level +1 or greater, the Rebel player receives income from the pirates' "contributions to victory" and the possibility of pirate ships reinforcing Rebel starships in battle exists. 

''Special Units:''

Six pirate brigs and a pirate brigade are placed on the faction's box (which doubles as the pirate base) at game start. If the Imperials raid the Cove, the brigs can meet them in orbit, while the brigade defends the surface. Any pirate units that manage to get away and survive the raid join the Rebels permanently. They are treated as any other unit and can be repaired, but not rebuilt if lost.

Before Pirate's Cove is destroyed (if ever), every time that the Rebel's starships are involved in Space Combat (except Interception Combat), the possibility exists of being supported by a pirate brig that happens to be around. A d10 is rolled; if the result is equal to or less than the current commitment level of the faction, a pirate brig (3-4, light starship) is added to the Rebel force. If the result is greater no reinforcement appears. The die roll is made at the beginning of the Space Combat segment. 

Damage on pirate brigs that appear as random reinforcements short of destruction is not kept track of, and it does not influence future reinforcements. However, if a random brig is destroyed in combat the Rebel must pay 1 rp in compensation "for the crew's families" (as agreed in the covenant). 

No compensation is paid for the loss of brigs that had permanently joined the rebellion after the destruction of Pirate's Cove, or those lost defending the Cove against an Imperial raid.

Pirate brig counters appearing as random reinforcements return undamaged to the faction box at the end of the battle, even if they had been destroyed. 

''Income: ''

The Rebel player receives in the R&B phase of every game turn a number of rp equal to half of the Pirate Princes' current commitment level (fractions kept). 

''THE SLAVERS CARTEL''

''Initial Commitment: -2''

''Commitment Range: -3 to -1''

''Modifiers to PeF Missions: -2 for Rebel missions. ''

Slavery of intelligent beings is forbidden by the Stellar Constitution. However, this law is not strictly kept on some worlds of the periphery, or by the Empire itself. Slave labor is used in the many evil secret projects that the Empire supports, and also by unscrupulous mine- or land- owners on faraway colonies or sparsely populated planets. The official position of the Empire is always that the problem "does not exist", "is being investigated", "has been exaggerated", "measures are being taken", etc. Many good people in the core worlds find the idea simply unbelievable.

Slaves are obtained from Imperial political prisoners and from raids by slaver parties. The latter, after years of bickering and even warring among themselves, have now formed a cartel (a.k.a. "The Red Hand") to make sure that business runs smoothly.

''Faction Seat: ''

The Slavers Cartel headquarters is based at a secret concentration camp. The Cartel keeps hundreds of thousands of slaves in this huge facility located in the depths of an uninhabited area of a planet, where they are classified and distributed. This planet is randomly selected at game start, but it cannot be a capital (roll again if it comes up). At start only the Imperial player knows the location of the Slavers camp, but the Rebel can discover it through Esp missions (see chapter 17) or other means. The camp is where PeF missions against the Society must be performed.  

Once the Rebel side discovers the location of the faction seat, if it has unopposed ground units on the planet's surface at the beginning of his Surface Combat phase, the Slavers Cartel facility and faction are destroyed. It is also destroyed if the planet goes into rebellion (even if the Rebel hadn't discovered it before that). In either case the Rebel track gets 10 rp from all the freed slaves that wish to join the rebellion.  

If the Slavers Cartel is destroyed the current commitment level would remain for initiative and victory determination purposes. It would no longer grant the Imperium any rp, of course.

''Commitment: ''

The slavers are

bad, bad guys. Their commitment range reflects that they are always leaning on the Empire. The best that the Rebel can achieve is to pressure them to tone down their activities a bit. The Imperial, on the other hand, can pressure them to tone them up! The Imperial side receives a constant income depending on the commitment level of the Slavers Cartel.

''Income:''

The Slavers faction grants the Imperial side a number of rp equal to the Cartel's current commitment level doubled (ignoring the minus sign) on every game turn's R&B phase. 

!''17. SECRETS''

There are many secrets in the game. Even if a //player// knows about a secret (the location of a minor faction for instance), his side and his units don't. They might be sitting on top of the location, which their owner knows to be what he is looking for, but they can't do a thing about it. The player needs to "discover" the secret through Espionage or other means before his units can act upon it in any manner.

''17.1 INTRODUCTION''

''a. General: ''

Many things and locations are unknown to one or both players at game start. Knowing these secrets

can bring advantages, so the players can assign their characters Espionage missions in order to discover them. The rules below assume that you are using the Esp mission to gain knowledge of secrets; however, the Prisoner Interrogation mission can also be used to discover them, but using a different procedure which will be explained later. Occasionally a secret will be discovered by random events.

A player cannot act upon a secret until his units have actually discovered it using game mechanics, even if he knows or suspects what or where it is. The effective discovery of a secret is noted by checking the corresponding box in the player's Secrets Log. Exception: In the case of Imperial secret facilities, discovery is noted by the fact that the counter is face-up.

''17.2 IMPERIAL SECRET FACILITIES''

''a. General: ''

The Imperial player has eight secret facilities

where his devious projects are carried out. At game start, the Imperial player puts the counters representing the eight secret facilities plus four dummy counters face down on the table and mixes them.  He then blindly picks them one by one and randomly selects a planet (using the Planet Random Selection table) to place each counter face down. Capitals and stations are ineligible for placement of Imperial secrets; roll again if one comes up. In addition, placement is not allowed in any planet that already has another Imperial Secret Facility counter; roll again if necessary. 

After placement the Imperial player may look at the counters, and place them face down again. Naturally, his side is assumed to know all these secrets. The Imperial may make use of them or take measures to protect them as he sees fit (as allowed by the game's rules).

The Rebel side is assumed to have heard rumors that "something fishy" is happening on a planet that has an "Imperial Secret" counter. To find out, however, the secret must be discovered.

''b. Discovering Secret Facilities: ''

The Rebel player must have a team in the same location as an inverted Secret Facility counter. The team must successfully perform an Espionage mission against it; this will place the counter face up, and if it is a dummy it is immediately removed from the game. If the counter represents a real facility, it is discovered. Secret facilities are also revealed if their planet goes into rebellion. 

''c. Description of Secret Facilities:''

''AREA 551''

This planet harbors an ultra-secret base where advanced Imperial military equipment of all kinds is designed and tested. The advantages the facility gives to the Imperial armed forces are reflected by granting the Imperial side 2 rp on every game turn's R&B phase as long as the planet harboring Area 551 is under Imperial control and not under enemy blockade.

Once the Rebel side discovers the secret, if it has unopposed ground units on the planet's surface at the beginning of his Surface Combat phase, the facility is destroyed. It is also destroyed if the planet goes into rebellion (even if the Rebel hadn't discovered it prior to that). In either case the Rebel track gets 10 extra rp from looting all the equipment and stealing the technology.

''CRYSTALLOID PLAGUE''

A strange meteorite fell on this planet, bringing a green crystalline substance that reproduces itself (probably a very alien life form), which is covering increasing areas of the planet's surface. The crystals can be harvested and produce great mineral resources, but they cause disease and mutation on plants, animals and persons. Instead of doing something to eradicate the problem, the Empire has sealed off the planet and is exploiting the resources that the substance produces with a big special factory. 

The advantages the facility gives to the Imperial side are reflected by granting the Imperial side 1 rp on every game turn's R&B phase as long as the planet with the plague is under Imperial control and not under enemy blockade.

When the secret is discovered by the Rebel, change the planet's unrest level to +2 (if not +3 already). A 1
^^
st
^^
degree SWE is generated from the planet (unless the unrest level modification calls for a greater degree). A 1
^^
st
^^
degree SWE is generated even if the unrest was not moved at least two levels.

When this planet goes into rebellion the facility is destroyed (even if the Rebel hadn't discovered it before that). The Rebels get nothing; they aren't so callous as to take any advantage of the planet's suffering, and in fact they begin at once to research ways of getting rid of the crystalline formations.

''IMPERIAL SECURITY'S ARCHIVES''

The Empire's love for bureaucratic detail will be its own downfall. Everything the Imperial government does, including the atrocities, is carefully recorded. The archives are kept in a secret level of an apparently innocent building, which in reality is an Imperial Security fa&ccedil;ade. 

Once the Rebel side discovers the Imperial Security's Archives, it can perform Espionage missions in the planet where it is located, aimed to discover any other Imperial secret facility without need of being at each facility's location. Furthermore, a +3 modifier to FASC applies to these missions. 

Once the Rebel has discovered the Archives, if he has unopposed ground units on the planet's surface at the beginning of his Surface Combat phase, the facility is destroyed. It is also destroyed if the planet goes into rebellion (even if the Rebel hadn't discovered it prior to that). In either case a d6 is rolled: 

''1-5''

the Rebel captured the Archives by surprise, and every Imperial secret facility in the game is discovered!  

''6''

The Imperial Security personnel managed to destroy the files before capture, and no new secret facilities are discovered.

In addition to the above, when the Archives are destroyed all the atrocities that are revealed cause a two-level increase in the planet's unrest (not into rebellion) and a 1
^^
st
^^
degree SWE is initiated (even if the unrest was not moved two levels).

''LABORATORY PLANET''

The population of this planet has been subjected to all kinds of experiments by Imperial Mengele-like doctors, without their knowledge. Poisonous gases, for instance; as well as diseases, different types of radiation, artificially-induced climate extremes and earthquakes, psychological pressure, etc. Furthermore, many people who go missing are in fact taken to horrible "hospitals" where monstrous experiments are conducted. The people have wondered for years why they suffer so many disasters. When their eyes are opened by well-placed information, they go into an anti-Imperial rage!

If the Rebel completes a successful P&D mission on this planet (even with a partial success), it immediately goes into rebellion. After the first rebellion, the facility is destroyed and the attribute is lost.

Note: The level of success in the P&D mission is treated exactly as a similar level of success in a SpR mission.

''PROJECT MOLOCH''

This is where the theoretical and practical experiments to create a planet-busting weapon are being secretly conducted, at an apparently common Imperial base. Once the facility is discovered, the Rebel player may conduct an (additional) Espionage mission here, which if successful will give the rebellion the plans of the Moloch and pave the way for its destruction. Note: The weakness of the Moloch cannot be discovered by random event or prisoner interrogation; only by an Esp mission on site. 

If the planet containing the facility goes into rebellion before the Moloch is built, the project is destroyed and the Imperial player may never build that atrocious unit. If rebellion occurs after the construction, the Rebel player learns the Moloch's weakness.

''RARE GEMS MINE''

The Empire has discovered on this planet a vast source of rare and valuable gems of different kinds. It seems like a substantial part of the planet's crust is formed by these stones. The fact has been kept as a well-guarded secret, and the mine has been exploited by slave laborers who never can leave it alive. 

The Rare Gems Mine grants the Imperial side 4 rp on every game turn's R&B phase as long as the planet is under Imperial control and not under enemy blockade. The first time the planet goes into rebellion, the Rebel track gets 20 rp from looting the stockpiles. The Rebel Concordance would never exploit the mines using slave labor, but legitimate means allow the Rebel player to get 1 rp every turn in which the planet is Rebel-controlled.

''RARE METALS MINE''

Similar to the Gems planet, except that this planet's secret resources are huge and easily mined amounts of rare and valuable metals; not only luxury metals like gold, but mainly those that serve to build spaceships and technological equipment. 

The Rare Metals Mine grants the Imperial side 5 rp on every game turn's R&B phase as long as the planet is under Imperial control and not under enemy blockade. The first time the planet goes into rebellion, the Rebel track gets 20 rp from looting the stockpiles. The Rebel Concordance would never exploit the mines using slave labor, but legitimate means allow the Rebel player to get 1 rp every turn in which the planet is Rebel-controlled.

''THE GRAVEYARD''

The Imperial Army has a well-hidden base on a deserted area of this planet. The facility is vast, but it is mostly devoid of personnel. Here are stored in neat, seemingly endless rows, light starships, fighters, ground armored vehicles, transports, suits of body armor, laseguns, you name it. These are old and outclassed models, but they are kept oiled, shiny and fully functional by a regiment of dedicated technicians. 

Currently the Empire has no need of these assets, as it prefers to field modern equipment. But if the situation turns really critical, they can be recovered and used in short notice. 

The Rebels on the other hand would LOVE to lay their hands on these treasures. They could certainly put them to very good use immediately. 

The Imperial player can make use of the Graveyard's equipment if and when the Initiative reaches 201+, during a R&B phase, but only if he controls the planet and it is not blockaded by the Rebel. The facility counter is removed, and the Imperial can place for free up to three second line units and up to 12 rp worth of light starships on the surface or orbit box of the planet. 

The Rebel player can loot the Graveyard if and when the planet goes into rebellion. He can add to the forces acquired normally from that rebellion, up to three irregular units and up to 12 rp worth of light starships, free. The facility counter is then removed.    

''17.3 MINOR FACTION SEATS ''

''a. General:''

Most of the seats of the minor factions

are known from game start, but Agnot Keep, Slavers Cartel, Grachenko Building, Free Traders Union and Pirate's Cove are unknown to one or both sides. Espionage missions can reveal them.

''b. Procedure: ''

Two different successes with the Espionage mission are needed to pinpoint one of these locations. The first will reveal the district where the seat is located; if neither player knew this yet, it is RaS. Of course, if one of the players already knows a faction seat's district, it is fixed and the other player will "discover" the same district instead of randomly selecting it. The second successful Esp mission will discover the planet (which is RaS with a d10 among those of the district that are eligible according to the Secrets Log), and therefore the faction seat. 

Each of these two successes is considered a "fact" and is noted by checking a box in the Secrets Log, under the entry corresponding to the faction seat being searched for. Besides each box is information detailing the effects of the discovery and the requisites to continue the investigation further.

The first investigation (to find the district where a seat is located) can be conducted on any planet. As the investigation narrows after having discovered the district, the team will have to perform the second Esp mission on a planet of that district in order to find the actual location.

A level 2 Esp success will allow the player to check the two boxes related to the faction he is looking for in his Secrets Log, therefore discovering the secret in one stroke.

''17.4 REBEL SECRET BASES''

''a. General: ''

The only Rebel secrets are the 

locations of Rebel bases; the major one and up to five minor (see section 18 for further details on secret bases). 

The Rebel of course is assumed to know all his secret bases, and must check all the related boxes in his Secrets Log.

''b. Discovering Minor Bases: ''

Discovery of

Rebel minor bases is similar to that of unknown minor faction seats (17.3.b). One difference is that the facts are not randomly determined, but revealed by the Rebel player as they are discovered.  The other is that Espionage to discover these secrets must be performed on a Concordance-owned planet, or on a planet that contains Rebel military units on its surface. This may cause some difficulty, as the second fact of the secret has to be investigated in the actual district where the base is located (i.e. against a Concordance planet or Rebel military unit located there).

''c. Discovery of the Rebel Major Base:''

The search for the major Rebel base is different from other Esp activities in that it is more of an elimination process than a following of positive leads. As Sherlock Holmes said: After you discard all the other possibilities, the one that remains, however unlikely, must be the truth.

Espionage against the Rebel secret major base can be conducted in any surface location that contains Rebel military units, or on a planet that is Concordance-owned. Every level of success in an Esp mission aimed at discovering this secret will force the Rebel player to reveal an eligible star system that is //not// the one that is near to the Concordia system. After eliminating 17 possibilities, the Imperial player will know which is the star system leading to the Rebel secret system, but he needs yet one more success in an Esp mission conducted on a planet of that particular system to discover the precise location of the star Concordia. When this is achieved, the Imperial player knows the location of the Rebel major secret base!

''17.5 THE PRISONER INTERROGATION''

'' MISSION''

''a. General:''

The PrI mission is an alternative way of discovering enemy secrets (or faction seats known by the enemy). It has advantages and disadvantages when compared to the Esp mission.

''b. Effects:''

Every level of success extracts one fact from a prisoner.

''c. Rank Limitations: ''

There is a limit on the information that you may extract from a given prisoner. The maximum number of facts (considering a fact equal to one box checked in the Secrets log, or the uninverting of an inverted secret facility counter) that a prisoner may reveal is equal to its Rank tripled. For example, Canon Tesenn doesn't know more than 6 facts, while General Mardok can give you up to 18. 

''d. Location Free: ''

A prisoner can reveal a fact regardless of location; there is no need to be in a specific district or planet even if it would normally be required by the Secrets Log.

''e. Need to Know: ''

You can only obtain from a prisoner a fact that the opponent knows. For instance, you can't ask an Imperial prisoner about the location of Grachenko Building if this has not been discovered by the Imperial side prior to the prisoner's capture.

''f. Safe House: ''

Although it can be assumed that this mission is being undertaken in a secure location (a prison cell, a safe house, a Rebel hideout, etc.), some dangers still exist in that team members are still going out in this errand or the other, problems with suspicious neighbors, etc. Therefore, random events affect PrI missions normally except as described below.

The Rebel player may conduct interrogations on New Hope and Rebel Minor Secret bases. These areas represent less danger for the team as many random events cannot occur there (see section 18).

Imperial Security Headquarters on Earth 111 is an especially secure location for the Imperial player to conduct prisoner interrogations. Random events 3-10, 13-35, 75, 88-93 and 99-100 may be ignored by an Imperial team conducting PrI on Earth 111. Notice that this applies only to the PrI mission.

''17.6 RANDOM DISCOVERY OF SECRETS''

''a. General:''

Sometimes Stellar events will grant a player the discovery of one or more enemy secret facts. Every "fact" must be determined separately. The location that has a fact revealed is randomly determined among those eligible (i.e. those that still have something that can be discovered about them). Every inverted Imperial secret facility counter is one location, as well as every faction seat known to the enemy and unknown by your side, and every Rebel base (including the major one) is one location.

If an event grants you more facts discovered than the selected secret has left, the surplus can be applied to another enemy-known secret (also randomly determined). Note: Uninverting a secret facility counter is considered one secret fact; checking one box for any other secret is considered one secret fact.

''17.7 COUNTERESPIONAGE''

''a. General: ''

The Esp mission can be used for counterespionage, in an effort to protect your secrets from the enemy. Generally speaking, counterespionage must be conducted in the same location(s) where an enemy espionage against that particular secret could conceivably be conducted. Even dummy secret facilities may be protected. You can only protect a secret that your side has discovered.

Examples: Espionage efforts to find the major Rebel secret base can be conducted in a location containing Rebel military units or on a Concordance-owned planet; therefore, counterespionage for that secret can also be conducted in a location containing Rebel military units or on a Concordance-owned planet. Attempts to uninvert an inverted secret facility counter can only be conducted at the counter's location, so counterespionage to protect that counter also needs to be conducted at that location. If a side has discovered the district where Pirate's Cove is located, further Esp missions would have to be conducted in that district, therefore counterespionage would need to be conducted somewhere in that district as well.

''b. Effects:''

Every level of success in counterespionage causes a cumulative -2 modifier to the enemy FASC when attempting Espionage against that secret. The accumulated modifier is noted on the enemy's Secrets Log, at one side of the secret affected. The accumulated counterespionage modifier may never exceed -10.

''c. Counter-counterespionage: ''

A player may use an Esp mission to clear some of the fog surrounding an enemy secret due to counterespionage. The location directives given in 17.7.a above apply to counter-counterespionage as well. Every level of success reduces the enemy counterespionage accumulated modifier in 2 points.

''d. Cover Blown: ''

If despite a counterespionage modifier a player succeeds (level 1 or better) in an Esp mission against a secret, all the accumulated counterespionage modifiers for that secret are discarded.

''DOWN WITH THE EMPIRE SECRETS LOG''

(The players are authorized to make photocopies of this log for their personal use).

''FACTION SEATS''

''Agnot Keep:''

 &#9633;

The district where Agnot Keep is located. After discovering it, investigation needs to be continued on a planet of that district.

 &#9633;

The planet where Agnot Keep is located; it is discovered.

''Slavers Cartel:''

 &#9633;

The district where the Cartel is located. After discovering it, investigation needs to be continued on a planet of that district.

 &#9633;

The planet where Slavers Cartel is located; it is discovered.

''Pirate's Cove:''

 &#9633;

The district (not Avsar or Central) where Pirate's Cove is located. After discovering this, investigation needs to be continued on a planet of that district.

 &#9633;

The RaS system where the asteroid, moon or uninhabited planet harboring Pirate's Cove is located (it cannot be the Yellow Wormhole 36). Place the Pirate's Cove marker on the off-course box of the system; it is discovered. 

''Grachenko Building:''

 &#9633;

The district (not Avsar) where Grachenko Building is located. After discovering this, investigation needs to be continued on a planet of that district.

 &#9633;

The RaS planet where Grachenko Building is located. Place the Grachenko Building marker on the planet; it is discovered. 

''Free Traders' Union:''

 &#9633;

The district (not Avsar) where the Free Traders' Union is located. After discovering this, investigation needs to be continued on a planet of that district.

 &#9633;

The RaS planet where the Union is located (it cannot be Earth). Place the Free Traders' Union marker on the planet; it is discovered.

''PROJECT MOLOCH''

 &#9633;

The weakness of the Moloch that allows its destruction by surgical strike.

''REBEL MINOR BASES''

''Alpha:''

 &#9633;

The district where Alpha base is located. Investigation needs to be continued on a planet of that district.

 &#9633;

The star system where the satellite or asteroid harboring Alpha base is located. Place the Alpha base marker on the off course box of the star. 

''Bravo:''

 &#9633;

The district where Bravo base is located. Investigation needs to be continued on a planet of that district.

 &#9633;

The star system where the satellite or asteroid harboring Bravo base is located. Place the Bravo base marker on the off course box of the star. 

''Charlie:''

 &#9633;

The district where Charlie base is located. Investigation needs to be continued on a planet of that district.

 &#9633;

The star system where the satellite or asteroid harboring Charlie base is located. Place the Charlie base marker on the off course box of the star. 

''Delta:''

 &#9633;

The district where Delta base is located. Investigation needs to be continued on a planet of that district.

 &#9633;

The star system where the satellite or asteroid harboring Delta base is located. Place the Delta base marker on the off course box of the star. 

''DWTE SECRETS LOG ''

page 2

''Echo:''

 &#9633;

The district where Echo base is located. Investigation needs to be continued on a planet of that district.

 &#9633;

The star system where the satellite or asteroid harboring Echo base is located. Place the Echo base marker on the off course box of the star. 

''THE REBEL MAJOR BASE''

''The Search for Concordia''

(Checked boxes are 

//not //

systems neighboring Concordia 13)

 &#9633;
	Avsar 12

 &#9633;
	Wolf 23

 &#9633;
	Vega 24

 &#9633;
	Canis 25

 &#9633;
	Ophiucus 33

 &#9633;

Altair 34

 &#9633;

Ignis 35

 &#9633;

Yellow Wormhole 36

 &#9633;

Van Mannen 43

 &#9633;

Indi 44

 &#9633;

Pavonis 45

 &#9633;

Luyten 52

 &#9633;

Kapteyn 53

 &#9633;

Ceti 54

 &#9633;

Aerolis 62

 &#9633;

Rotina 63

 &#9633;

Stein 64

 &#9633;

Groombridge 65

''Concordia''

After discovering the star system that adjoins Concordia 13, investigation must be continued on a planet of that system.

 &#9633;

The Rebel Major Secret Base!

!''18. REBEL SECRET BASES''

''18.1 THE REBEL MAJOR SECRET BASE''

''a. Concordia and New Hope: ''

From game start the Rebel player has a major secret base 

at the mysterious star system Concordia 13, which is located outside of the Empire's boundaries. The system contains a single planet, New Hope, which is the actual location of the base and the Concordance's provisional capital. 

This star system is assumed to be separated by a distance factor of two from a star system that directly abuts on a map edge. This means that the 18 possibilities are: Wolf 23, Vega 24, Canis 25, Ophiucus 33, Altair 34, Ignis 35, the yellow wormhole 36, Avsar 12, Van Mannen 43, Indi 44, Pavonis 45, Luyten 52, Kapteyn 53, Ceti 54, Aerolis 62, Rotina 63, Stein 64 and Groombridge 65. The Rebel must randomly and secretly select one of these systems and note it by placing the system's marker on the appropriate box of the Concordia 13 system (on the Rebel display). 

The Concordia star system and New Hope function similarly to any other star and planet in the game. However, the planet begins the game already in Concordance allegiance, and in Rebel control. It has no coup box but it has a monster. The system's depiction is similar to that of other systems, but it is located on the Rebel Display and therefore it is kept out of the Imperial player's sight most of the time. It is located in no Imperial district. The system can be eligible for random selection, although it is frequently specifically excluded. New Hope, like Avsar II, is not included in the Planet Random Selection table and therefore is not eligible for placement of secrets, treasures, etc.

The following Action Step random events cannot occur on a still-secret New Hope: 03-12, 26-47, 75, 88-93, and 99-100. Only FrM, GeR, PrI and RaM missions are allowed there. After discovery, it functions exactly as any other planet.

''b. Movement: ''

Concordia 13 is assumed to be two distance factors away from an on-board system secretly and randomly chosen by the Rebel at game start. Hyperjumps to and from Concordia are calculated by adding two to the distance in relation to the designated on-board system.

Suppose the Rebel has randomly chosen Luyten 52 as the system adjoining Concordia 13. A hyperjump from Concordia to Lalande 21 would have a total distance factor of six (two from Concordia to Luyten, one from Luyten to Procyon 61, and three more from Procyon to Lalande).  

If a Rebel starship (not a character spaceship) ever moves //out// of Concordia 13, the Rebel player must immediately reveal to the Imperial player the star system adjoining the Rebel secret star system. This of course will place him one step away from discovering the location of the major secret base itself, so the Rebel should calculate carefully the moment when his fleet will sally forth. 

Starships may move //into// the Concordia system without revealing the secret. When hyperjumping into Concordia 13, the player may make his distance calculations secretly and not reveal to the Imperial player which column of the hyperjump table is used.

''c. Resources: ''

Concordia 13 is assumed to be the primary place where Rebel resources are stockpiled. Every time a planet goes into rebellion, the Rebel player gets rp for his Resources track, usually equal to the planet's resource ratings. The Rebel may also get rp when certain Imperial secret facilities are destroyed (see 17.2), from taxation (see 14.4) and sometimes from friendly minor factions. 

''d. Blockade and occupation: ''

When the Imperial player has discovered the location of the Rebel major secret base it may be necessary to partly uncover the Rebel Display, to allow Imperial operations there. Imperial blockade and occupation have no effect on the Rebel player's ability to get rp for his track from any source (18.1.c) even if the source planet, or the major secret base itself, are blockaded or occupied.

Unlike the case with Imperial capitals, Imperial blockade does not impede the building of military units on the planet's surface or GDN upgrade on New Hope, but unopposed occupation by ground units does. The presence of Imperial starships in orbit does impede the building of starships in the orbit box.  

''e. Destruction:''

If New Hope is destroyed by the Moloch, all the rp currently on the Rebel Track are lost. The Rebel player can openly announce in the following R&B phase another Concordance-owned planet (if he has one) as the new (no longer secret) Rebel major base and begin to collect rp again. If the Rebel has no Concordance-owned planet to name as new major base, it means that he already lost the game by Sudden Death; see Campaign scenario sheet. 

The new major base has all the attributes that New Hope had, except being secret and the limitations (18.1.a) on missions and events.

''18.2 REBEL MINOR SECRET BASES''

''a. Creation:''

During play the Rebel may build minor secret bases in star systems (during an R&B phase). Each time that the Rebel player builds such a base, he must announce the fact and the base's name to his opponent, but not the location. This represents the Empire "having heard rumors" which may prompt an investigation. A minor base costs 10 rp. 

The Rebel player secretly assigns his new base to a star system of his choice, except Sol 11, Concordia 13, the star system previously chosen as adjacent to Concordia 13, or the yellow wormhole 36. Place that system's marker on the "Minor Base" box on top of that base in the Rebel Display. The base is assumed to exist on a moon, asteroid or uninhabited planet of the system, and therefore to be located on the system's off-course box. The Rebel player should keep the rest of the star system markers hidden from view in a cup or bag to prevent the Imperial player from deducing a base's location.

The Rebel player may have up to five minor bases in play. Each minor base may be built only once in the game, and cannot be replaced if destroyed. 

''b. Attributes: ''

A maximum of one Rebel non-capital starship or non-elite, non-militia ground unit may be built per R&B phase in one active minor base (just one unit per turn, even if the Rebel has several minor bases). The stacking limit of a base box is two legion-sized ground military units plus up to four light starships. Heavy starfighters don't count for stacking in minor bases (they may stack free). Rebel capital starships may not enter minor bases.

Any number of characters and character spaceships may occupy a minor base. Aside from Free Movement, Prisoner Interrogation is the only mission that can be performed on a minor secret base, but characters can rest and repair items there. The following Action Step random events cannot occur on a Rebel Minor Base: 03-47, 75, 88-93, and 99-100.

''c. Movement: ''

Rebel units may move into and out of a minor base using hyperjump without revealing it, simply by picking the moving units up from the mapboard and placing them directly onto the base box in the Rebel Display, or vice versa. When hyperjumping into or out, the player may make his distance calculations secretly and not reveal to the Imperial player which column of the hyperjump table is used. However, moving by impulse into a minor base from the same star system or vice versa will reveal the base!

Movement into a minor base is an exception to the general rule prohibiting direct movement into off-course boxes.

If Rebel starships (or ChS's) going to a minor secret base get lost or off course they are supposed to be in the off-course/lost box of the star system, but you don't want to reveal that to the Imperial player; so place them on the Rebel Display. Lost starships are noted by having a "Lost" counter. Off-course ships can be placed just outside the minor base's box with their counters rotated 90&deg;. Off-course and lost ships around minor secret bases must have their situation resolved as soon as possible, just like any other ship in that situation.

''d. Destruction:''

If the Imperial player discovers a minor secret base's location, the appropriate Base marker is placed on the system's off-course box, on the map. The Imperial may send forces to that off-course box to destroy it. The Imperial raiders may include capital starships and elite ground units. The Rebel base is treated like a mini-planet for purposes of the combat, with surface and orbit boxes. Its environmental size is considered to be 2. 

All Rebel units including starships are assumed to be landed when the Imperials arrive (they are hidden in hangars). Combat is otherwise resolved normally. If at the end of the Imperial Surface Combat segment there is an unopposed Imperial ground unit in the location, the base is destroyed. Place the reverse of the Base marker (X) on the base's box of the Rebel display. After this the Imperials must leave as soon as possible, and no units of either side can return here.

!''19. IMPERIAL STRATEGICRESTRICTIONS''

As a result of inefficiency, corruption and its oppressive discipline, the Imperial Army is semi-paralyzed. High officers are busy in politics, trying to advance their careers, or happily engaged in illegal business to get rich. Lower-ranking officers do not dare to show any initiative in a system where the smallest mistake can cost them their heads.

We must also consider that at game start the Empire is complacently enjoying Pax Stellaris, and has no reason to overreact. What would happen to a middle-ranking officer who ordered three stormtrooper legions and a whole fleet to faraway Mir 241, at a cost of thousands of credits in fuel cells, disrupting Imperial regular assignments and tours of duty, just because it is rumored that Bagul was seen there?

Another factor is professional jealousy. High commanders don't like troops from another command to come meddling in their district, so moving a unit into another district actually implies a command transfer. But then, commanders are loathe to give away their military units, because their prestige is based upon them.

Finally, local forces are supposed to control the situation. Police or garrison soldiers should handle enemy agents, while the local military commander should be able to cope with "disorganized irregular Rebel bands" with ease... Calling for reinforcements implies inability and weakness.

''19.1 TENSION LEVELS''

''a. General: ''

Every planet has a 

tension level, which is derived from a number of factors. The tension level

must be calculated locally at the moment when a situation that could be affected by it arises. The tension of most planets will be obvious at a glance, especially for veteran players, but it is always a good idea to double-check.

''b. Calculation:''

The basic tension level of a planet is zero, which means that the Empire is not a bit concerned about its security. To this are added several modifiers that depend on the attributes of the planet and on the general situation of the district where it is located. These modifiers are found in the Tension Level Modifiers chart.

Example: The planet Neogea 252 has an unrest level of -1, contains the Area 551 facility which has already been discovered and uninverted by the Rebel player, and a detected Rebel team is present. The tension level of Neogea is 4: +3 for area 551, +1 for detected enemy characters. The //negative// unrest level is not subtracted. 

''c. Imperial Strategic Rota: ''

Every district is considered to be in its annual scheduled activity period in the same game turn in which it is taxed. Every planet in that district has its tension level increased in two.

When Avsar II goes into rebellion, it is "incorporated" into Armes district for purposes of scheduled activity.

So sure is the Empire of its power and security that its military forces have operated for a long time on a regular schedule of assignments and tours of duty. Once a year the military forces of a given district are subject to rotation, reassignment and redistribution.
''19.2 RESTRICTIONS ON IMPERIAL MILITARY UNIT MOVEMENT''

''a. General: ''

There are restrictions on the ability of Imperial military units to move towards planets. Generally speaking, the tension level must be high enough before you can send in the troops. The Imperial Strategic Restrictions Chart gives details. 

''b. District Capitals: ''

Imperial military units located in a district can always move towards that district's capital, regardless of tension level.

Imperial military units located in a periphery district capital can always move towards Earth 111 and vice versa.

''c. Rebel Secret Bases: ''

Whenever any Rebel secret base is discovered by the Empire, its tension level is considered to be 8+; i.e. Imperial military units from any capital or from anywhere in the same district can go there.

''d. Events: ''

When an event indicates that military units must go somewhere, those units are cleared to go regardless of tension levels.

''19.3 RESTRICTIONS ON IMPERIAL CHARACTER MOVEMENT''

''a. General: ''

Imperial characters in spaceships are only free to move towards a planet with a tension level of 3 or more. They can try to move towards a planet with lesser tension, but the move is subject to clearance by Central Command. A d6 roll is made before the Preliminary Random events roll; a result of 1-5 is needed to go to a tension level 2 planet, a roll of 1-4 for a tension level 1 planet, and a roll of 1-3 is needed to go to a tension level 0 planet. If a character team fails to get clearance for a move towards a given planet, it can immediately declare a new mission on a new planet and try to get a new clearance (if needed) to go there. If one team failed to get clearance to go to a planet, other Imperial teams may still try to go there in the same phase.

If a planet contains a treasure, Imperial characters may treat it as if its tension were one level greater than normal for purposes of the restrictions given in the preceding paragraph.

''b. Avsar: ''

If Avsar has not rebelled, Imperial character teams may only go to Avsar II if they include an Avsari character, or if they are holding the Avsari Holocube. No clearance die roll is needed if these conditions are met. No military units may go to Avsar II prior to rebellion.

When Avsar II goes into rebellion, it is "incorporated" into Armes district; take this into account when calculating Avsar's tension modifiers and movement restrictions.

''f. Events: ''

When an event indicates that characters must go somewhere, they are cleared to go regardless of tension levels.

''19.4 TENSION EFFECTS ON TRACKING AND BLOCKADE''

Thousands of spaceships arrive or leave every day on every planet of the Empire, and usually they are not kept track of. This allows Rebel teams to slip in incognito. Only when the situation on a planet becomes tense do the security forces start to pay attention to incoming and outgoing traffic.

''a. Tracking: ''

The tension level has an effect on the ability of a planet's GDN or starships in orbit over that planet to track and attack Rebel character spaceships, as defined in the Imperial Strategic Restrictions chart. 

''b. Blockade: ''

A minimum tension of 5 is necessary for the Imperial player to be allowed to impose a blockade over a planet.

''c. Wormhole Entrances: ''

The tension level of the wormhole

boxes (not the stations themselves) is always considered to be at least 3 for effects of tracking Rebel spaceships trying to use the wormhole. The tension could be higher if the stations themselves have a higher tension. The normal tension level is used if the Rebels are //not// trying to use the wormhole, but just arriving at, or leaving, the station.

''19.5 ALERT CONDITIONS''

''a. Condition Green:''

The normal state of affairs in the Empire is Green, noted by placing a Condition Green counter on the Alert box of the mapboard. All is well (you hope).

''b. Yellow Alert: ''

When the Empire loses the operational initiative (101+ Initiative points accumulated, see 22.1.c), the Imperial player may declare a Yellow Alert condition by placing an appropiate marker on the Alert box of the mapboard. Declaring a Yellow Alert costs 1 rp, paid in the R&B phase. The effect of this condition is to increase the tension level of all planets in one.

If the Empire recovers the operational initiative, the Yellow Alert condition cannot be mantained and it drops to Green.

''c. Red Alert: ''

If the Initiative points total equals or exceeds 201, a Red Alert

may be declared. Declaring a Red Alert costs 2 rp, and it increases the tension level on all planets in two.

If the Initiative points total is reduced below 201, Red Alert cannot be mantained; it would have to be dropped to Yellow.

''d. Upkeep:''

Both Alert conditions require upkeep

(14.5.e).

As the roof starts falling upon their heads, the Imperial decision-makers are shaken into a state of more readiness. Perhaps too late, they begin to take some measures to place the Empire's forces in a more alert condition. 

''19.5 THE GREAT INVASION''

''a. General: ''

After one or more Rebel military units have exited from New Hope and entered the mapboard, all Imperial Strategic restrictions are lifted. The Imperial player may move all his units as he sees fit.

Notice that even after the Great Invasion

existing Alert conditions must continue as long as they can be upkept, even if no longer needed, because upkeep cannot be refused.

The sallying forth of the Rebel Army confirms with a shock to Imperial High Command the existence of the rumored Rebel Secret Base. Unless the Rebel player has done things wrong up to this moment, this is a major invasion, which Imperial military intelligence didn't even think possible. Capital starships? Elite divisions? 

The Imperial Army knows that this time it's for real, and every unit is placed on full alert. Martial law is declared throughout the Empire, and greater discretion is given to commanders on the field.

!''20. STELLAR EVENTS''

''20.1 THE STELLAR EVENT DECK''

''a. Setup: ''

Before the game begins the deck of Stellar Event

cards must be thoroughly shuffled and placed at one side of the mapboard. Since only the 30 topmost cards will enter play, you may place the rest out of the way (without looking at them).

''b. Drawing: ''

In the Stellar Events phase of every game turn the Rebel player draws the topmost card, and the players carry out its instructions. Stellar Event cards are mostly self-explanatory, or have their effects explained elsewhere in the rules (such as sovereigns and treasures). Some cards that have prolonged or delayed effects should be kept prominently displayed as a reminder.

''20.2 FURTHER DETAILS OF STELLAR EVENTS''

''a. General:''

Some Stellar Events have complicated effects that cannot be fully described on the card. Additional details of these events are given below.

''b. Barbarian Invasion: ''

After the invasion,

the Barbarians minor faction ceases to exist and its commitment level is zero for initiative and victory determination purposes. Remove the faction seat counter.

During the invasion, the longship and horde units left behind as garrisons on conquered planets must be those most damaged. 

Barbarians will attack GDN's by bombardment or assault only if the GDN's STR is less than theirs. They will risk raking and land in the face of an able GDN, but only if it is level 0 or 1.

A planet occupied solely by Barbarians is controlled by neither player. At the end of every game turn in which a planet is occupied only by Barbarians, or by Barbarians and Rebels, the unrest level is increased in one (even into rebellion). The population blames the Imperial military for allowing the invasion to happen, and expects them do so something about it. And if the Empire doesn't, they will.

The side that manages to clear a planet's surface from Barbarian hordes can modify that planet's unrest one level in its favor (not into rebellion). This does not apply if the initial invasion is repulsed; only if the foreigners had conquered the planet. 

The Barbarian units are enemies of both sides and will fight them alike. They never attempt to disengage from combat, and once the original invasion has been settled they do not move any further. Their "Combat segment", even in later turns following the initial invasion, is resolved in the Stellar Events phase. They will not attack if the enemy STR is equal to theirs or greater. Barbarian occupation of a planet in rebellion will prevent Concordance Allegiance.

The opponent of the player who is fighting the Barbarians in a given instance controls them for that battle. In the rare case that Barbarians invade a planet where both Imperials and Rebels are present, the latter two will declare a temporary truce and fight shoulder by shoulder against the common foe. In this case neither player would use the Barbarian forces; they would be distributed by RaS. 

Barbarian units will search for detected teams of both sides. 

''c. Brent Smith's Defection:''

If Smith does attempt to incite an Imperial unit to defection, it is resolved in the Stellar Events phase as an InD mission with a single d20 roll. Brent's FASC total is considered to be 10 for this special mission (after doubling and modifiers this gives him an MT of 26). Until the colonel stacks with a Rebel team or military unit, he is considered to have an elite soldier escort at his side. This is a trusted aide that joined him in defection. 

In the extraordinary case that Smith is on an off-course or lost spaceship, the resolution of his defection is deferred to the end of the first Imperial Military Ops phase in which he isn't off-course or lost. Of course, in this case the forewarned Imperial player will get a chance to set him loose where he can do no harm (or perhaps of taking him to a hornet's nest...), but no direct action by the Imperial player against the character prior to the defection is allowed. The Imperial player //must// take Smith out of any of those situations as soon as possible.

Notice that if Brent is in orbit during his defection, he can try to incite to defection a starship. He can try against any ship except a dreadnought or the Moloch; however, an attempt against a capital starship must be treated as if it were a stormtrooper (i.e. you need a spectacular success). He then has the choice of remaining with any defecting starship, or using the escape pod (no survival die roll needed).

''d. Mon Vermon's Defection: ''

If Vermon decides to go for the Assassination, it is resolved in the Stellar Events phase with a single d20 roll. Vermon's FASC total is 5, plus any applicable modifiers. He must face the consequences of an Abysmal Failure alone.

If Vermon's defection occurs in orbit, he abandons the ship using an escape pod (no survival die roll needed, and he can still make his Asn attempt). 

In the extraordinary case that Vermon is on an off-course or lost spaceship, or in a Rebel secret base, the resolution of his defection is deferred to the first Imperial Missions phase in which he isn't off-course, lost or in a secret base. Of course, in this case the forewarned Rebel player will get a chance to set him loose where he can do no harm (or perhaps of taking him to a hornet's nest...), but no direct action by the Rebel player against the character prior to the defection is allowed. The Rebel //must// take Vermon out of any of those situations as soon as possible.

''e. Imperial Armed Forces Purged: ''

The affected character is instantly (without need of any transportation; that is a courtesy of the Imperial secret police) moved to Earth 111, and must remain jailed there (without a chance of getting out by normal means). In each future Stellar Events phase, roll a d10: 

''1-5''

	Charges cleared, the character is free. 

''6-9''

	The character continues in military prison.

''10''

	The character is executed.

''f. Epidemic: ''

If Dr. Fedorova spends an extrinsic activity step on a planet of the district affected by the plague, her heroic efforts to help the victims cause the planet's unrest to increase one level in the Rebel's favor (not into rebellion).  She can possibly affect up to three planets.

The Rebel must remember to apply the results of the epidemic on minor secret bases located in the affected district. 

!''21. SPECIAL UNITS''

''21.1 MOLOCH''

''a. General: ''

This is a huge Imperial mobile space station that has the ability to concentrate a portion of a star's gravity into the core of one of its planets, causing catastrophical instability of the mantle and the crust. The unimaginably strong earthquakes and tsunamis that follow, along with huge volcanoes spouting magma on a continent-wide scale, end all life-as-we-know-it on that planet for centuries to come. 

In addition, it is a capital combat unit of incredible power, the equivalent of two //Imperial// -class battlestars at least. However, it is not very mobile, and has the following restrictions in combat:
<ul> <li>*If the Imperial is the attacker in a Space Combat, the Moloch

	must always be placed in the screened line, unless it is the only unit left. 
<li>*If the Moloch is in a defender force and the attacker is disengaging, it cannot pursue. In other words, it cannot fire against the attackers anymore. 
<li>*The Moloch's STR is never taken into account for disengagement differential calculations, whether it is in the attacker's or in the defender's force. 
<li>*The Moloch may never use Hasty disengagement; only Prepared.
</ul> 

''b. Use: ''

If the Moloch is in the orbit box of a planet at the end of a Space Combat segment, it may destroy the planet. Everything on the planet surface (units, faction seats, etc.) is destroyed, and all informational markers are removed. Place a "Planet Busted" marker on the planet.

Units in that planet's orbit box must leave as soon as possible, and cannot return. The planet no longer exists, and neither player may send units to its orbit box. Exception: If the Moloch is still there, the Rebel may send forces to attack it.

After destroying a planet, the Moloch cannot destroy another in the immediately following game turn (its graviton condensers need to be recalibrated).

''c. Faction Seats: ''

Faction seats destroyed by the Moloch  are treated as follows:

__Agnot Keep__

: Treat this exactly as if the Imperial player had raided the Keep. The seat may be relocated.

__Avsari Castle__

: Treat as if the Empire had cracked down on the Avsari order; the Avsari commit to the Rebels, and these get 8 rp.

__Minoplisian Minority__

: Seat and faction cease to exist. The current commitment level is kept for victory and initiative purposes. The "Barbarian Invasion" Stellar Event can still happen.

__Bounty Hunters Guild__

: The seat ceases to exist, but not the faction. Its commitment level, however, becomes 0 and cannot be moved from there for the rest of the game. The Rebel may hire bounty hunters after this. 

__Commerce Federation, Slavers Cartel__

: Seat and faction cease to exist, keeping the current commitment level. 

__Free Traders__

: The seat ceases to exist, but not the faction. It automatically commits to the rebellion (level +4) if it had not done so before.

__Hyper-mafia__

: The seat ceases to exist, but not the faction. Its commitment level, however, becomes +3 and cannot be moved from there for the rest of the game.

__Legion of Fortune__

: The seat and faction cease to exist. All existing LOF brigades, whether under contract or not, become Rebel units permanently, even if they were under Imperial hire at the moment. Commitment becomes +1 for game purposes.

''d. SWE: ''

Every time the Moloch destroys a planet, a 3
^^
rd
^^
degree SWE is originated there. 

''e. Destruction by Space Combat: ''

If the Moloch is destroyed due to normal Space Combat attacks, its special graviton condensers become unstable and it explodes catastrophically, causing d6 hits to every spaceship of both sides in the orbit box, and to the planet's GDN. Crippled status does not apply to Moloch. 

Moloch's hull could probably take more than 40 hits. This is simply the point where the condensers become unstable.

''f. Destruction by Surgical Strike: ''

If the Rebel has learned the secret weakness of the Moloch (17.2.c) he may attempt to destroy it by "surgical strike

", a selective attack directly on the weak point. This involves a peculiar and interesting procedure. The strike can be aborted at the end of any of the stages described below.

SETTING THE STAGE: The Rebel must engage the fleet containing the Moloch during his Space Combat segment, and fight one round of combat. Ideally the Rebel fleet should include at least one ChS and several starfighter units, light and heavy. The strike can be attempted only with fighters, but the chances of success are minimal; a good pilot in a good character spaceship is best.

RUNNING THE GANTLET: Notice that the Moloch is guaranteed to be around at the end of the round of combat, because it cannot perform a Hasty retreat. Both sides now prepare for a special dogfight by picking up all the starfighter squadrons they have in the battle (after deploying reserves, if applicable) and flipping them over to their dogfight-type light starfighter side. The Rebel may add the dogfight-type heavy starfighter, if he has at least one heavy starfighter in the battle. The Rebel may also add up to two character spaceships.

A dogfight is fought for two rounds. The Rebel places his forces as the defender, including the choice of placing any ChS in the screened line (all starfighters must be in the front). The Imperial player then assigns his fighters to targets randomly (in compliance with their SO status). No disengagement is possible (not even by a ChS).

Light stafighters killed in the dogfight do not affect the squadrons present in the battle. Just flip them over to their squadron side, and replace them on the battlefield. The destruction of a heavy starfighter, however, does cause one starship-type heavy starfighter to be eliminated.

A WALL OF LIGHTBEAMS: Now the Rebel survivors must face Moloch's awesome flak. This is resolved as a raking attack using Moloch's STR. Hopefully some fighters survived the dogfight to screen the ChS, or if two ChS's are present one can screen the other. If not... well... 

THE FINAL RUN: If at least one ChS survived to this stage, it is used to resolve the surgical strike. Only one ChS is used even if two are present. If no ChS is present, but at least one starfighter survived, it can make a last-hope try, but its chances will be minimal.

A Surgical Strike number (SSN) must be calculated for a ChS by adding the following values:

''	''

''+x''

	Pilot's navigation minus two (NAV-2).

''+x''

	Pilot's courage minus two (COU-2).

''+x''

	Ship's maneuverability (NOT modified by pilot's NAV) minus two (MNV-2).

''+x''

	Ship's strength (NOT modified by pilot's NAV) minus two (STR-2).

''+1	''

For every other unit (ChS or starfighter) that has survived to this stage and is still accompanying the striker.

The SSN for a light starfighter's attempt is 1; for a heavy starfighter, 4. The modifier for other surviving units still can apply.

If equal to or less than the SSN is rolled with a d20, the Moloch explodes in a spectacular ball of fire! When the Moloch is destroyed by this mission, it does not cause catasthropic explosive damage to other units in the orbit box (21.1.e). 

If the roll fails by a difference of 1-2, Moloch is not destroyed but receives d6 hits.  

Starfighters that survive to the end of the strike are flipped over to their squadron side and returned to the battle.

The Space Combat can then continue, whether the Moloch was destroyed or not. Only one surgical strike per battle is allowed, though.

''f. Restrictions: ''

Moloch may be built only when the Empire has lost the operational initiative (initiative points 101+). It can only be built on Earth 111. The Moloch is unique; if lost it cannot be rebuilt. 

Even the evil Emperor has his qualms about this weapon; the Imperial player may not use it to destroy planets until the operational initiative has been definitively lost (201+ points). It can be used for other purposes such as Space Combat or to help in quashing rebellions before that.

''21.2 SPECIAL FORCES ''

''a. General: ''

The Imperial player has two Special Forces

organizations, the Star Marine Infiltrator Brigade (SMIB), belonging to the Imperial Navy, and the Yellow Helmets, an Army formation of stormtrooper derivation. The Rebels have one such unit, the Space Dragons.

These organizations never fight as discrete combat formations, but generally send small teams in special missions of extraordinary difficulty. In game terms, the Imperial player may deploy one Special Forces detachment from each of his organizations, while the Rebel has only one.

''b. Deployment:''

An SF detachment may be deployed by paying 3 rp in an R&B phase. Take the detachment counter and place it in the Special Forces box on the mapboard, which means that it is eligible for assignment. If the detachment is destroyed, it may be rebuilt.

The Rebel SF detachment, the Space Dragons, cannot be deployed before at least one Rebel elite ground unit has been built (in New Hope).  

''c. Assignment:''

An SF detachment can be assigned (or reassigned) to a military unit in the Team Organization segment of the owning player's Missions phase (and only then), by placing the detachment's counter under it. A detachment could also be returned to the Special Forces box if the owner wishes. The enemy player can see the counter if it is in plain view, but obviously not if it is placed under a unit hidden in a starfleet or a secret base.

The SMIB may only be assigned to a capital starship or to a Star Marine legion.

The Yellow Helmets may only be assigned to a stormtrooper legion or the Imperial Guard.

The Space Dragons can be assigned to any Rebel regular or elite ground unit, to a light cruiser, or to any capital ship.

A detachment may not engage in any activity (except Surface Combat) during the same turn in which it has been assigned/reassigned to a military unit. 

''d. Operational Range: ''

An SF team may conduct missions on any planet that is within two hyperjump distance factors of the location where its detachment counter is.

''e. Missions: ''

SF teams may effect modified Res, Sab and Ste missions anywhere within their operational range, but not in the same Missions phase in which their detachment was assigned/reassigned. In the mission profiles (11.5), items that apply only to SF teams appear underlined.

SF missions are para-character missions (11.2.p). They are resolved only as a Final step with a base of 2 FASC and any other applicable modifiers. They may not be continued. Each SF team member (commando) is  considered  to  have  the   following  attributes: STR 4, END 6, AGI 4, Avoidance 1, INT 3,  COU 4, COM 3, everything else 0.

An important quality of SF teams is that unlike regular Action teams, they can effect Res and Sab missions in space, against units in the orbit box of a planet.

If a prisoner is rescued by Special Forces it is immediately taken to the military unit that the SF detachment is assigned to.

''f. Attacks on Enemy Teams: ''

If a player conducts a successful search and he has an SF detachment on the planet, he can choose to send in an SF team. In melee an SF team consists of three commando soldiers. Commandos are better armed and trained than ordinary soldiers. They enjoy a +2 drm for their own surprise roll, while the enemy characters get a -2 drm for their surprise roll. The combat is hand-to-hand.

Unlike other system opponents, special forces may attempt disengagement if the battle is going badly for them.

If an SF team captures an enemy character, at the end of the melee it is immediately taken to the military unit that the SF detachment is assigned to.

''g. Combat, Damage and Elimination: ''

A ground military unit that has an SF detachment assigned gets +1 STR due to the fire support that the detachment provides. SF detachments assigned to starships have no effect on space combat.

SF detachments involved in ground combat can absorb a hit by becoming damaged. A damaged detachment can absorb a second hit, but would then be destroyed. SF detachments assigned to starships have no effect on space combat and cannot absorb hits.

Detachments are eliminated if their assigned military unit is eliminated. Remember that SF detachments may only be reassigned in the Team Organization segment. 

If one of a detachment's teams suffers a failure during one of its para-character missions, or if sent in melee against enemy characters and all three soldiers are killed, roll a d6. On a '6', the detachment is damaged (invert the counter to its back side). If an already damaged detachment is damaged again this way, it is destroyed. 

A damaged detachment can be repaired as if it were a ground unit (i.e. it must be in a location where a ground unit could conceivably refit), at a cost of 1 rp. It can also be repaired while on the Special Forces box. 

''h. Upkeep: ''

Imperial SF detachments require upkeep

(14.5.e).

The Special Forces units themselves are assumed to be thousands strong. A detachment is about company-strength, while the typical team in the field has three commandos. 

Obviously, the loss of a three-man team wouldn't destroy or seriously affect a detachment, but when it happens, it can be assumed that it had accumulated casualties from various other operational events (aside from those that the player orders), and this team's loss was the breaking point. 

An explanation closer to the designer's intent: The possible damaging of detachments, and the price you pay to build or repair them, exist for game reasons.

''21.3 SUICIDE BOMBERS''

''a. General: ''

After the Empire has lost the operational initiative (Initiative points 101+), the Imperial player may announce that he is starting to recruit and train suicide bombers, a last resort against those pesky Rebel teams that seem to be impervious to everything else. 

''b. Creation: ''

During an R&B phase the Imperial player may place a "Shields of the Empire

" (SOE) cell on any Imperial-owned planet that has a minimum unrest of 0, at the cost of 0.5 rp. The planet may be occupied or blockaded by the Rebel; this does not prevent placement. 

There can be only one cell on any given planet. Only one cell per turn may be placed. The Imperial can create a new SOE cell when he has run out of  markers by simply removing an existing one from the map (and paying the usual cost).

Once at least one SOE cell has been placed, the Imperial player may continue placing and using them even if the Initiative points drop below 101.

When things are desperate, the Empire may resort to extreme solutions.  The young and impressionable can be manipulated into fanaticism for a cause, even to the point where they are willing to sacrifice their own lives. The suicide bombers project is under the control of special Imperial Security agents who have been dispersed in the diverse planets with the mission of creating quasi-religious cells to recruit useful fools. Of course, the Imperial government denies having any control over these "spontaneous, albeit misguided, acts of patriotism", and even "condemns" some of the most brutal zealot attacks.

''c. Operational Range:''

The SOE cell may attack any military target in the same star system where it is located. 

''d. Military Targets: ''

Once per Imperial Missions phase, an SOE cell can attack a Rebel military unit on a planet surface (not in orbit) or a Rebel GDN anywhere in the same star system. The attack causes d6-4&deg; hits.

''e. Attacks on Rebel Teams: ''

If the Imperial conducts a successful search and he has an SOE cell on the planet, he can choose to send in a suicide bomber. 

In order to successfully "detonate", the suicide bomber must achieve surprise against the team; however, Rebel teams that for some reason cannot be surprised (if they have a dog, for instance), are //not// immune to mad bombers. They merely get a +2 drm to their surprise dice roll. 

If surprise is achieved, the suicide bomber causes every team member 2d6 hits. Otherwise he/she dies miserably and causes no damage.

''f. Suppression and Elimination:''

SOE cells are eliminated if the planet goes into rebellion. They can also be suppressed or eliminated by Rebel Esp missions, in exactly the same way as active Rebel cells.

''g. Search Ability:''

If the Imperial player is otherwise unable to search on a planet that contains an SOE cell, the cell gives him a token search value of  '1'.

!''22. THE OPERATIONALINITIATIVE''

''22.1 THE INITIATIVE''

''a. General: ''

At game start, the Imperial has an unchallenged power; therefore, he holds the operational initiative

. As the game progresses and the Rebels begin to inflict chinks on the Imperial armor, the initiative begins to shift until it switches completely to the Rebel side. 

''b. Effects: ''

The main and not unimportant effect of having the initiative is the ability to decide who moves first in the Military Ops stage. Also, when the Empire loses the initiative (101+ initiative points) it can build the Moloch (21.1), and it may begin using suicide bombers (21.3). Furthermore, loss of initiative allows the declaration of increased Alert conditions (19.4).

''c. Eroding the Empire's Initiative: ''

In the Stellar Events phase, after drawing and implementing the effects of the event, the players should check certain circumstances that cause unbalance to the Empire (see the Initiative Points chart). Each such item is worth a number of initiative points. The point total is kept using hit markers on the Initiative Points boxes on the mapboard. That total will be in effect for the entire game turn, even if circumstances change during its course.

When the sum of points equals or exceeds 101 the initiative is no longer clearly held by anyone. At the beginning of a Military Ops stage, who will get to decide which side moves first is determined by a d6 according to the Random Initiative table.

When the initiative points total equals or exceeds 201, the operational initiative shifts to the Rebel player. No die roll is needed anymore.

The operational initiative is dynamic; the Imperial can recover it if he manages to lower the initiative points total.

''INITIATIVE POINTS CHART''
<table width="549" cellpadding="14" cellspacing="0"> <col width="443"/>
 <col width="48"/>
 <tr valign="top"> |''CAUSE'' |''PTS'' |
 |Each planet in rebellion |7 |
 |Each Concordance-owned planet  (except New Hope), Imperial-occupied |8 |
 |Each Concordance-owned planet  (except New Hope), in Rebel control |10 |
 |Unrest/pacified level of any planet that has a positive such level |x |
 |Commitment level of any sovereign/ faction that has a positive level |x |

      ''RANDOM INITIATIVE TABLE d6'' <table width="474" cellpadding="14" cellspacing="0"> <col width="179"/>
 <col width="104"/>
 <col width="105"/>
 <tr valign="top"> |''Initiative Points'' |''Imperial'' |''Rebel'' |
 |''101-120'' |''1-5'' |''6'' |
 |''121-140'' |''1-4'' |''5-6'' |
 |''141-160'' |''1-3'' |''4-6'' |
 |''161-180'' |''1-2'' |''3-6'' |
 |''181-200'' |''1'' |''2-6'' |

	                            Example: Nine planets are in rebellion (+63), one is Concordance-owned (+10), the sum of positive unrest levels on planets that have them is +14, the Avsari Order and the Free Traders are committed to the Rebels (+4 each), King Moomer is committed to the Rebels (+4), and other uncommitted minorfactions have a sum of positive commitment levels of +3. Theinitiative points total is 102, and therefore the Imperial no longerholds the operational initiative. It must be randomly determined,and on a d6 result of 6 the Rebel will get to decide who moves firstin this Military Ops stage.   

  ''DOWN''  ''WITH''  ''THE''  ''EMPIRE''  

 ''APPENDICES''

''Copyright Charles Duke 2003-2005''

!''APPENDIX A. THE STELLAREMPIRE AND THE ROOTS OF REBELLION''

After the discovery of warp drives in the year 2450 A.D. and the first expansive wave of colonization by the children of Earth, a century or so of social stagnation followed in which no interest in further colonization existed. "Earth and its nine colonies" (Mars, Lai, Batres, Chiron, Aurora, Vesperas, Drasperon, Zasperon and Einstein) seemed to be the written-in-stone destiny of humanity. 

However, a drastic socio-cultural metamorphosis was occurring in the Lacaille system, on the planets Aurora and Vesperas. We won't go into the cultural aspects, important though they are; but the highlights of the social revolution were an abhorrence of Earth's overlordship over the colonies and a yearning to continue expansion to the stars. Finally the tensions erupted into a declaration of independence of the Lacaille Republic from the "Terran tyranny". 

The "United Planets" (the official name of what was really a Terran Republic) did not have a great Navy or Army, as it had not seemed necessary until now (no alien races having been discovered yet). The vast majority of what there was, though, was secure in U.P. hands. The Lacaillians had only seized a few patrol spaceships and tried to rig some freighters as combat vessels, but their tiny fleet was soon swept away and limited itself to commerce raiding as privateers. After a while the planets were under blockade and invasions followed. 

The war was far from over, as the well-motivated Lacaillians dug in, and a protracted Civil War of several years followed. Only conventional weapons were used, as both sides were loathe to destroy the planets themselves; the locals because they were their homes, and the Terrans because they officially considered them U.P. provinces (temporarily "misguided"), and did not want to alienate the people permanently after the never-in-doubt victory.

Finally the rebels could take it no more and sued for peace. They recognized their allegiance to the United Planets, and were "generously" admitted back without sanctions (albeit with continued military occupation "for the time being"). The treaty even granted them autonomy to pursue their way of life, and contained a proviso that virtually acknowledged that the Lacaillians had a point about the need of continued stellar expansion.

The war had deeper implications though. If anything, it reinforced the centralization of power on Earth, and promoted the rise to power of a hawk faction led by Space Marshall Pantaleon de Armes. For many years he held de-facto total power, with a semblance of democracy. The military was kept at full strength.

While the lame-duck United Planets council debated endlessly, Armes could hold back his ambition for absolute power no longer and staged a coup in 3072 A.D., declaring himself Emperor of the Stars. Most of the planets of the budding empire were smart enough not to resist the inevitable. Some welcomed it; among them, surprisingly, the Lacaillian planets. 

Pantaleon I was ambitious, but he was not an evil man. Among his great desires were to be loved and admired, and to go down in history as the greatest Emperor. He succeeded in both accounts. The Empire prospered under his rule, and when he died 69 years later, few, even among conquered peoples, could say that they weren't better off than before. He created great and honorable institutions: The Stellar Senate, substitute of the lame-duck United Planets Council, had a measure of real legislative and political power. The Stellar Constitution was an incredibly democratic document given the circumstances, and it contemplated autonomous planetary governments under the aegis of the Emperor, which was certainly better than the colonial system. The Imperial Social Security substituted health systems that had collapsed years ago. The Imperial Guard, at first only a company, was founded to protect His Imperial Majesty.

Exploration and colonization, government-sanctioned, soon were reactivated. As the Lacaillians were the most prone to emigrate, they expanded to more planets than the traditional Earth-centered humans from the other planets.

Then the space explorers discovered the Drak race on the Draconis system, which came as a shock for all of humanity. The Draks were a totally alien race. However, they were basically humanoid; erect, two legs, two hands, and a head with a recognizable face. This seemed to prove a theory of evolution that some exobiologists had entertained: That living matter everywhere will tend to evolve an intelligent species of humanoid shape. On Draconis IV, apparently the reptilians had won the evolutionary race. They also had a couple of weird things, though; they were hermaphrodites!

For Pantaleon there were no doubts: The aliens must submit to the Stellar Empire. The Draks were at a backward technological level compared to the humans, similar to the 19
^^
th
^^
Century on Earth; but they were a proud race. When an Imperial embassy presented an ultimatum, they courteously but firmly rejected it. "But why can't we be friends?" was their answer to the Emperor.

That answer wouldn't do for Pantaleon. The press was fed a gruesome story of how the Draks had ambushed and massacred a peaceful ambassadorial team that only sought diplomatic relations, and then even desecrated the bodies of their victims. A cry of outrage swept the young Empire. The senate declared war. 

The conflict was totally lopsided; many were reminded of the Conquistadors of old Earth history crushing the hapless Aztecs and Incas. But the proud Draks would not give in, and even caused some painful losses to Imperial troops in well-placed ambushes. Then came Lorenz Hubba.

Hubba was an Auroran technician who had never really gotten over the defeat of his planet in the Civil War. The coming of the Empire had embittered him even more, and the Drak War was the last straw. He contacted the Draks secretly and provided them with the knowledge to build spaceships and modern weapons. Hubba was later discovered and executed, becoming the archetype of traitors. (Recently some revisionists in the Rebel Concordance have tried to vindicate the figure of Hubba as an unsung hero who foresaw the true evil of the Empire).

Extraordinarily quick learners, the Draks began to secretly build a modern Army and even some small fighter ships. Just when the Empire was beginning to think that Draconis IV was practically secured, the new Drak army struck, defeated the Imperials everywhere and forced them to evacuate the planet. Predictably, this only brought a devastating response from the Stellar Empire. A few months later the remnants of the Drak army surrendered unconditionally.

Pantaleon I was wise, and he was incredibly generous with the vanquished. They were given citizen status, equality in the Stellar Senate, help to reconstruct their planet... After a while many Draks were quite happy with the turn of events. 

The mere fact that aliens races existed spurred the Empire into an expansionist frenzy. Pantaleon was very popular (independent surveys gave him 89% favorable opinion just after the Drak War, and historians believe it is accurate), and with the enthusiastic backing of the people he started conquering planets and races. World after world yielded to the Stellar Empire. A few resisted and were blockaded and bombarded into submission. As before, the Imperial policy was brutality and ruthlessness against resistance, then generosity with those embracing the Empire. When Pantaleon I died, there were 22 jewels on the Emperor's crown. 

The members of all races were stimulated to colonize new worlds that were discovered or terraformed. Except for a few that preferred to remain on a single planet, most of the thirteen recognized races of the Empire took advantage of this. Colonists were directed to planets far from their home worlds, in order to prevent clustering that might lead to nationalism. Some planets were shared by more than one race.

Subsequent emperors were more or less aggressive, more or less popular, more or less wise... The Empire slowly grew.  On the year 3277 A.D., with 39 jewels on his crown, Pantaleon III the Great declared "Pax Stellaris" as year 1 of a new era. Two years later the Avsari Order was founded on the planet Avsar, as an autonomous, semi-religious organization devoted to the honing of mind, body and spirit in the service of the people of the Empire.

Four hundred more years passed before the Empire began to change, subtly at first and then even more quickly and violently. Taxes were raised. The Imperial Navy, for centuries the pride of the Empire's citizens, was now felt as a heavy hand under many skies. Corruption became rampant, and soon every Imperial institution became riddled with it. The Imperial court lived in an obscenely luxurious style, almost impossible even for a Stellar Empire to support. Inefficiency reached levels unheard of.

Planets that could raise their quotas quietly and efficiently were allowed to keep their own government intact. Less fortunate planets, or those that dared to protest openly, had their governments toppled and viceroy governors installed. To top it all, the cruelty and degeneration of the current Emperor, Pantaleon IX, makes all his predecessors pale.

Finally, the oppression can be withstood no more. On this year of 499 Pax Stellaris, a daring group of people from all the races of the Empire have come together secretly on the planet Lipe 552. Their goal: To define the paths that must be taken to end the evil Empire and create a free Concordance of Planets in its stead. 

The call goes forth, and it is whispered in the back alleys of countless cities, and it is echoed in the gloomy caverns, and it is shrieked in the skies, and it is written by the hands of young heroes on many a wall:  

WE MUST BE FREE.

!''APPENDIX B. RACES ANDGOVERNMENTS ''

''RACES''

''Human''

Humans represent the "core" of the Empire, hailing directly from Earth or descended from the colonists that spread to the nearby stars. The Empire was formed precisely by the Humans

conquering everyone else. Supposedly, the Stellar Constitution guarantees equality to all the recognized races of the Empire, but in fact Humans have a clear dominance in Imperial affairs. 

''Travisian (Human)''

In the year 78 P.S. the "prophet" Augustus Travis founded his new religion among the Humans on the planet Oisad 611, and it spread like a wildfire. Perceived as revolutionary and seditious, the sect was persecuted by the Empire. Finally, Travis and most of his followers accepted the choice given to them by Imperial Security: Exile to colonize the planet Xibalba, which nobody wanted because of the presence of a black hole in the planet's star system, in exchange for "reinsertion" into the Emperor's goodwill. 

The colonists made Xibalba a very prosperous planet and behaved very well, paying all their taxes and respecting the Throne. On the year 205 P.S. his Majesty Terenz II admitted Xibalba as the 41
^^
st
^^
crown jewel and allowed the Travisians recognition as a separate race in the Empire, including the permission to colonize new worlds. They took advantage to spread to a few systems where they found only one habitable planet, in order to keep their isolation and avoid "contamination". The aggregate of all four Travisian planets, sometimes expanded to include the Travisian minorities on other planets, is referred to as "Travisia".

Although the tenets of the Travisian

religion are hard to swallow for most other people, they are not evil. They promote harmony with nature, hard work, decency and virtue. Travisians are generally perceived as very honest, but closed-minded.

In the last century, especially after the discovery of the wormhole near Xibalba, they have abandoned some of their isolation and have increased their diplomatic, commercial and cultural relations with other planets. A few of them have even been quite active in Imperial politics. This "opening of the window" has led to some rift in Travisian society, with strong opinions in favor and against. From this also derives the controversy between those that think that they must continue to loyally support the Empire as Travis mandated, and those that want to join the "cleansing" rebellion against it in view of its sinful degradation.

''Ragnari''

A tall, furry, strong humanoid race which could be described as bear-like or gorilla-like. They originated from the planet Ragnar. Ragnari

make excellent soldiers, and have provided the Empire during generations with some of its best. They also have an adventurous nature which makes many of them wander the stars as merchants, explorers, smugglers or pirates.

Ragnari are popularly (and unfairly) perceived as dumb, and they are the protagonists of many a joke. ("A Ragnari comes into a bar and...")

''Solarian''

The Solarians

are the archetypical "aliens": Fetus-like, white skin, slanted jet-black eyes, bulbous head, skinny body... In fact, they are the people that visited Earth in "flying saucers" during the 20
^^
th
^^
Century, having discovered warp before the Terrans. It is believed that Human scientists secretly studied wrecked UFO's and copied some of the technology in order to develop their own warp drives. 

After their initial wave of peaceful exploration, the Solarian society suffered a cultural collapse which led to a standstill in space exploration; they isolated themselves in their planet Solaria. Some say that the shock of discovering the barbaric ways of the Human race had to do with this. As it turned out, they were still holed up when the expanding Stellar Empire engulfed them and incorporated Solaria without a fight.

Solarian males are short, about 1.3 meters tall, but are much more adventurous and prone to travel than the females. These, by contrast, are very tall, usually more than two meters high, with long snaking necks and limbs. Most other races find the Solarians' lack of clothing disturbing, even though there is nothing to see. They reproduce by abdominal fusion, eat by skin absorption of liquid foods, and excrete as a gaseous emanation which gives them their peculiar, and not altogether unpleasant, smell.

Although they have expanded to other planets under the Empire's aegis, and by need have adapted to the customs of neighboring peoples, most Solarians tend to look down at other races and prefer not to mix with them too much.

''Drak''

The Draks

are a strange race of humanoids with a warty, scaly skin, originated in Draconis III. Paradoxically, on the one hand they are a peace-loving, philosophical and lawful race, and on the other hand they are fierce warriors when roused to fight. Draks are very industrious and reproduce quickly, perhaps to balance their life span that is shorter than that of other races (a 40-year-old Drak would be venerable).

Unlike other races, Draks have no sexes; they are hermaphrodites. The convention is that when other races refer to a Drak, the correct term is "him" rather than "it", and when referring to a Drak parent, he is a "father". 

''Endobell''

This flying bat-like race lives on the tops of huge sequoia-like trees or in cities carved on the face of high cliffs (like the famous vertical cities of Dobell 531). In some places they live in flat "normal" cities, but visitors beware: In the upper levels of their buildings, many doors open to the air! Their upper limbs, like those of bats, are wings; but they have some prehensile fingers free (including an opposing thumb) forming a useful hand. The Endobells

are not very given to space flight, but they did take advantage of opportunities to colonize new worlds when prompted by Imperial policy. In many cases they share the planet with some other race, filling different ecological niches. Endobells are appreciated as workers in gaseous planets, because they can fly around floating cities to perform maintenance.

''Aquarians''

The Aquarians

are an amphibious humanoid race evolved on the sea planet Aquaria, living mostly in cities built at the bottom of shallow seas, near the coast. They became civilized in the air, however, developing their industries on the surface of the few small continents of the home planet; since technology requires fire, and fire cannot exist in water. They later used air-containing underwater domes to exploit the sea and its bottom. 

The skin and gill-lungs of Aquarians adapt to the environment in which they are currently living, although they prefer to have water handy even if dwelling on land. They don't tolerate prolonged dryness, and must carry a water spray dispenser if staying out of the liquid for a prolonged time. They like to travel space as well.

Even with their different physiology, Aquarians are surprisingly human-like, with the same general face and body appearance. Their skin is blue, smooth (not scaly), and they have discretely webbed feet and hands. They also sport a short, eel-like tail. Some of them have the latter amputated in order to better fit among other humanoid races.

''Igneans''

A strange orange-colored humanoid race with bald cone-shaped heads that thrives in temperatures around 40-45 degrees Celsius. Igneans

are incredibly strong in the presence of great heat, but weak and docile, almost vegetative, in cool environments. Technologically they are behind other races and have little to offer to the Empire and its politics. They expanded to other planets only because the Empire prodded them to colonize hot areas that could not be used by other races in a few worlds. 

''Lakandi''

The Lakandi

are, among all the alien races, the most Human-like. In fact, they are genetically-related to Humans, and many scientists are certain that the two races had a common origin. Most inter-racial marriages (that do occur on occasion, weird as it seems) are sterile, due to the genetic incompatibility; but Human-Lakandi couples are fertile and may have children.

The Lakandi can best be described as elves from J.R.R. Tolkien's //The Lord of the Rings// ; thin, lithe, beautiful, intelligent, with slanted eyes and pointed ears. In fact, many Humans refer to them as "elves", sometimes derisively, and Lakandi don't appreciate the term. 

Janidel was crowned king of Lakandon a few years ago, despite hinted Imperial disapproval. He leads a highly sophisticated society, which has provided the Empire with some of its best technicians and scientists. However, recently many Lakandi have been declining to accept assignments at Imperial institutions, disgusted by the current policies of the Emperor. King Janidel secretly gives some aid to the Rebel cause, without openly opposing the Empire. 

The inhabitants of Lakandon are advanced, but they are not interested in expansion. Except for individual cases, the vast majority have chosen to live only on their planet of origin.

''Chapine''

The planet Kecsal is home to a race of communal insectoids similar to ants or bees, but very large, and with human-like intelligence. In fact, Chapines

look like a giant ant or beetle, walking on four legs and using their two forelegs as arms and hands. The workers have a simple "eye" on one of their fingers, which aids greatly in technical tasks since they can "see" inside machinery.

The Chapines, as could be expected, have a caste system. At the bottom are working sterile females, which have average intelligence. Then we have the warriors, sterile males, strong and big, but not very bright intellectually. They are appreciated for special Imperial military units. The royals are prince-drones (fertile males) and princesses (fertile females). When the king and/or queen of a hive die, the princesses first fight each other (usually not to the death) and the winner is prospective new queen. Then she runs out to the desert and the drones (from the same hive and from neighboring ones) chase her while fighting each other, with the one reaching her becoming the new king. The new couple are both the reproducers of the hive, and its governors (being intellectually superior) with the king being top cat. The losing prince-drones who survive the nuptial race form the council of advisors of the new king, and become sterile. The losing princesses also eventually become sterile and are normally assigned to administrative tasks or as military commanders, so their intelligence does not go to waste.

The planet Kecsal has many hives, just as other planets have cities. Each hive is autonomous, but the planet is governed by a council of all the hives, a sort of parliament. Hives are underground tunnels, similar to ant colonies, with workers going out to the surface to harvest food. Most of the advanced technological industries on Kecsal are also on the surface, where small towns also exist to host visitors from other races. 

A few Chapine hives have been allowed to settle on other planets, especially where their labor is needed, but nowhere except on their home planet are they numerous enough to have representation as a separate race in the game. 

''Tritonid''

Tritonids

are a rather backward race inhabiting the planet Moronica. They are amphibians, but are less humanoid than the Aquarians, with scaly, dark-green skin and fins on their head, back, elbows and feet. Their face is also more fish-like. They reproduce slowly, so they never filled all the areas of their planet and couldn't prevent Aquarian and Drak colonies from being settled on Moronica. These races now outnumber the natives, and they are resentful.

''Cyborg (Human)''

The Human colony on the frigid planet Ercoth began experimenting with ways of making the colonists more naturally resistant to the cold. Soon the experiments got out of hand, and the Ercothians were bent on exploring "new levels of existence" through incorporating machine parts into the human body, genetic manipulation and use of strange drugs. There seemed to be no limit, as all kinds of weird monsters were being created (such as two-headed or four-armed persons). 

This horrified the rest of the inhabitants of the Empire, and there was a generalized outcry to make them stop. Finally, the Emperor clamped down on Ercoth, an Imperial Viceroy was imposed, and a total prohibition was established on experimentation and "enhancement". This led to the Cyborg Revolt, which went on for almost a year with great losses on both sides. Finally, a treaty was signed where the Cyborgs

were recognized as a separate race of the Empire and allowed to make some cybernetic enhancements on their bodies which they considered essential. An Imperial Law imposing strict limitations on how far this could go was decreed. The law boiled down to the requirement that no enhancement make a citizen non-humanoid, or non-living, or too physically powerful, or psychic, or replace his/her brain; and that enhancements could only be made if the person allowed them (being of a minimum legal age). A few Cyborg citizens do choose not to be implanted, or to take only minimum enhancements, but they are considered extravagant by the rest.

The Cyborgs accepted the Law and its spirit sincerely, and they no longer want to go so far in their customs as to become alien to the other races of the Empire. However, they do want a bit more of liberty, and they resent the hate and contempt which the other races feel for them. For a Cyborg, the cybernetic implants and genetic manipulations are just as clothes, shoes, vaccines or tools are for other races. They just want to be understood.

''Boroin''

The Boroin are vaguely humanoid beings. They do have a head (but no neck), two arms and two legs; but they are rather formless, like if they were made of putty.  Their face is barely recognizable and only has one eye with a slit-like mouth. Their skin is purple with pink spots. 

Boroins

live on the toxic (to other species) planet Chalchtek. They can live just fine in normal atmospheres, although they do need periodic infusions of their own "poison" to be healthy. A strange thing about them is that they have three sexes, all of which are required to reproduce.

The planet Chalchtek has many valuable resources, and the locals are of course the most suited to exploit them, so the Empire has treated them nice (relatively) and given them equal status as an Imperial race, with Chalchtek being considered one of the jewels of the Emperor's crown. 

Boroins live in a harmony coming from a loose telepathic connection between all of those living on the planet Chalchtek. This collective mind makes important overall governing decisions, like when to sow and when to reap, or when to declare war; but it is not specific enough to resolve an individual's problems, or to allow Boroins to speak with each other mentally. It is more like a general wisdom. Chalchtekites that leave the planet break connection with the collective, which is a cause of some psychological stress.

''GOVERNMENTS''

''The Stellar Empire''

All the power of the Stellar Empire

emanates from the person of the Emperor, who theoretically owns everything and everyone; in this sense it is an absolute monarchy. However, from its inception a Stellar Constitution and a body of laws have existed to define and moderate the exercise of this power. Persons and planets have rights, which even in the time period covered by the game are at least in theory respected and observed. The progressive disregard for these rights and the abuse of power are precisely what have incensed the people and brought about the rebellion.

Imperial legislative power is in the hands of the Stellar Senate, where every planet that has official recognition as a "jewel of the Emperor's crown" has representation by one senator. The senators are designated by the local government of each planet in accordance to its own political system, and their persons are inviolable. 

The Senate has the power to pass laws, but the Emperor has the right to veto any of them. In theory, the Senate also holds a similar power to veto Imperial Decrees, but the last time that such a decree was vetoed was more than 200 years ago. 

The Stellar Empire is that because it consists of an overlord (the Emperor) ruling over many semi-independent vassal states. Each planet is self-governed with a political system of the people's choosing, although as overlord the Emperor retains the right to intervene "if Imperial interests are affected". In addition, the planet's citizens must pay Imperial taxes and tariffs, and every year a quota of the young and fit must serve in the Imperial Army.

The Imperial armed forces are a supranational army, but each planet is allowed to raise and maintain a local army for its security. These forces are technically subordinate to the Imperial High Command in case of need, and are represented in the game by conscript units (or sometimes by "sovereign's own" units).

The diverse planets do not consider themselves a single "country" with each other. In fact, they relate by diplomacy; with ambassadors, treaties, even wars on occasion. A citizen of Karibden might need a visa to go to Nessus, for instance.

''Captaincy-General''

Important colonies are governed by Captain-Generals named by the Emperor until such a time when they reach enough population and importance to be recognized as a "crown jewel". After recognition the locals must decide their style of government, a long bureaucratic process, and meanwhile the Captain-General remains in office. C-G's exert absolute power over their colonies in the name of His Majesty, although of course the colonists expect fairness from their governor and may appeal to the Emperor if they feel grieved. 

''Collective Mind''

The Boroins of Chalchtek do not have a formal government, although they do have a body of spokespersons. The race enjoys a quasi-telepathic bond, and major decisions are taken by the common wisdom of all the planet's inhabitants.

''Council of Elders''

The traditional and simple-minded Igneans have mantained an anachronistic government system based on a council of the "Elders" of each clan on a given planet. The ruling of the council is law. The planet is represented by the "Head" of the council, although he/she holds no individual power other than moderating the council's debates. The system might be considered republican, if it weren't for the almost religious respect in which the people hold their Elders, and the submission that their decisions are met with.

''Council of Notables''

In this system, the government is in the hands of a council formed by the most notable citizens; preeminent and respected figures of religion, science, the professions, the arts, and business. The council functions in a way similar to any other parliament, and it elects among its members a board of directors to exert executive power.

''Democracy''

In democratic governments the people vote to elect all of their executive and legislative authorities, including a president; usually for a relatively short period of time, after which new elections are held. The rights of the individual are of utmost importance in a democracy.

''Dictatorship''

Most dictatorships claim to be democracies and hold "elections", but these are either rigged, or the dictator regularly appears as the only candidate. His/her power is absolute. However, there is always the risk of suffering what he/she once did to another ruler; being toppled from power by an ambitious subordinate!

''Hive''

The Chapine insectoids from Kecsal live in hives, and in each its king reigns supreme. For matters of planetary importance, the kings of the various hives meet in a council, usually once a year. One different hive is named each year to be in charge of foreign relations, tax collection, recruitment selection and the other boring matters of planetary government.

''Imperial Commander''

The space stations are not really planets, although they function as such in the game. The Empire considers them military outposts, and a Navy Commander is placed in charge. Although he/she has to deal with the everyday problems of the civilians who live on the stations, his post is akin to that of a starship captain.

''Imperial Viceroy-Governor''

When the Empire was founded, the Emperor reserved for himself the Solar System (now Central District) as his personal fief. Earth and Mars (and later Ganymede) were governed in the name of the Emperor by appointed Viceroys.

When Bertoleon I organized the districts, or grand duchies, the capital planets were given as fiefs to the dukes. However, it was not expected that their highnesses would //really// have to look after the routine matters of governing those planets. Therefore, these were also appointed Imperial Viceroys, technically subordinate to their duke (and of course through him to the Emperor). So far so well. Most of the people of Central District and the capitals had no problem with the new status quo.

The Stellar Constitution provides for Imperial intervention in planets that are in turmoil or that otherwise "might affect the stability of the Empire". This was always considered an emergency measure to be applied only rarely, and then temporarily. However, Pantaleon IX has invoked this law on more than one occasion recently to dismiss uncooperative planetary governments and rule the planets directly, in violation of the Constitution. On these planets he has placed Imperial Viceroy-Governors. This is one of the outrages that have led to the rebellion.

''Monarchy''

To be considered a monarchy in the game a planet must have a king or queen with a measure of real executive power; not just a figurehead. Incredible as it may seem, many peoples of the Empire have chosen to be ruled by absolute or parliamentary monarchs, due to the social stability and the aura of nobility and tradition that they bring. 

''Parliament''

A parliamentary system has a powerful senate or parliament, which may be formed by aristocrats with a birthright to be there, or by elected representatives. The parliament delegates executive power on a prime minister or similar functionary, who exerts it in a way similar to that of a president in a democracy. However, a prime minister's hold on power is more shaky than that of an elected president because it depends on the continued support of the parliament. If this is lost, the government falls and a new one must be formed (usually around a new prime minister). 

''Plutocracy''

The government of the richest. The people have decided that those who know how to make an honest buck must also know how to govern well. Senatorial seats are won on this planet by demonstrating your wealth instead of by popular votes. The wealthiest person is Plutocratus Maximus, ruling as a president or prime minister would in other systems. 

''Politburo''

The communistic planets are governed without tolerated opposition by their politburo, a.k.a. gerontocracy because they are mostly old geezers from the hard core Communist Party. The politburos make all the political decisions behind closed doors, including the appointment of their executive power figure, the chairman.

One would think that socialist ideals would clash with the oppression of the Empire, but these stalinist governments are really chums with the Emperor. Any rebellion on these planets will come directly from the people; don't expect the politburos to change their stance.

''Presidency for Life''

This is basically a democracy, but the people want to avoid the hassle of constant elections, so functionaries (including the president) are elected for life, until their death or resignation.

''Republic''

In the game, we define a republic in the old Roman sense; a senate formed by aristocrats, perhaps with some popular representation, holding all the power. The senate does not bother with naming a prime minister; they exert executive power directly, although in times of crisis (like a war) they might name a temporary dictator with absolute powers.

''Stewardship''

This is an absolute monarchy where the ruling line has been lost without heir apparent. However, the people have great loyalty to that ruling house, and they have an unshaken hope, perhaps supported by mystical prophecy, that one day a legitimate heir will rise to claim the throne. Meanwhile the planet is governed by a noble steward, whose post may be hereditary (if the king takes too long to return...)

''Theocracy''

The Travisian planets are ruled by the clergy. Religion permeates every aspect of Travisian life, so this seems only natural. Of course, theocracies tend to be closed-minded, inward-looking, and intolerant.

!''APPENDIX C. DESIGNER'SNOTES''

DWTE uses a common theme of SF sagas: A stellar Empire that has gone rotten, and a rebellion that rises to bring it down. Instead of a mind-boggling galaxy, this Empire only has about a 50-light-year diameter, and is centered on Earth. 

The Empire is dominated by humans; this makes it much easier for the players to identify with the simulation. However, this is not the classic "Human is good, Alien is bad" situation. Humans can even be seen from a point of view as the bad guys, because they were the conquerors of the other races, and they dominate the Empire. However, at least in its inception the Stellar Empire was not evil, and it brought prosperity to its subjects.

There are 10 non-human races in the Empire, as well as two races that although of human stock, are culturally so different as to be recognized as different in the Imperial system (and in the game). I have tried to make the races more credible, departing from the cartoonish features of the aliens in other games (talking dogs, cats, frogs and so on, which sometimes made one feel foolish when playing them).

One of the paradigms in strategic SF games is that playing the Rebel is all the fun, while taking the Empire is bo-RING. Well, in DWTE perhaps it still is a bit more fun to be the Rebel, but it is only a matter of a small degree. In this game I'm quite capable of saying, "I feel like playing as the Imperial today". There is so much to do, even for the Imperial, that you don't get the chance to become bored. In fact, you wish you could do more as there are so many options and things that need to be looked after. 

The Imperial side has many interesting characters, including the most powerful of them all, Mas Pantaleon, Duke of Armes, Crown Prince and Master of the Avsari Order. However, there are always fewer Imperials than Rebels, from game start and also as the game progresses. If it weren't so, the Rebels wouldn't stand a chance of winning. Imperial characters can gain items in DWTE (weapons, robots, etc.) but they have a lower probability of doing so, and therefore usually will get less of them. 

A fundamental aspect of DWTE is planet accesibility (for the Imperial; The Rebel of course can go where he pleases!). The "accessibility" of a planet is not so much a function of it being in a given star system or province, but instead depends on a "tension level". At lower tension levels, the Empire has no cause for worry, and his armed forces do not have the clearance to move towards them in unscheduled moves. At the minimum tension level, the Imperials aren't even bothering in checking the outgoing and incoming spaceship traffic, and Rebel spaceships do not suffer tracking.

However, if tension increases-- the population is in unrest, a sovereign is inclining towards rebellion, or enemy troops are on the planet-- the Imperial High Command will start to take notice, and to authorize reinforcements to be sent there. Defenses are placed on alert, and will attempt to detect suspicious traffic. A planet may be peaceful one turn, and become a hornet's nest in the next, if Rebel actions increase the tension. This leads to an interesting dilemma: If the Rebels do things right, they will find themselves on a "hot" planet in the next turn, and the Imperial player will have a chance of moving troops in before the Rebel team can leave. If the characters are detected, the Imperial is guaranteed at least one search opportunity against them. The Imperial's options in "Rebel hunting" are many, and the Imperial doesn't have time to be bored. He has to be ready to jump at every occasion, and move his forces around with mathematical precision. 

Perhaps the aspect that many players will find most interesting is in the military units and combat system. In DWTE starships and ground military units are separate, and function in different ways. The variety of starships, from puny sloops to mighty dreadnoughts, each counter representing a single ship, gives space combat much flavor. Ground units, on the other hand, typically represent legions or divisions with 20,000 soldiers on average. They slug it out on planet surfaces, as infantry has done from the dawn of history. 

There are two other types of combat, which occur at a more close and personal level. In character combat, or melee, individual player characters duel with monsters, enemy soldiers and angry civilians met during missions. Character spaceships get attacked by individual enemy starfighters in a type of combat called a dogfight.

Although each has its different flavor and nuances, all four types of combat have a common system for resolution.

However, the combat system is far from simplistic, and the depth of the decision making required from the players makes it fascinating. Should I fight to the bitter end, stand for a round and then make a planned retreat, or just flee as soon as possible, throwing caution to the wind? Should I place this valuable unit in the front, or leave it safely in the screened line?

The number of dice rolled during battles does introduce a rather wild luck factor, but it also makes anything possible. There are no guaranteed results. A sloop can theoretically kill a battlestar... If you ever see it happen, though, let me know!

I have tried to keep the "Mission" as the heart of the game. However, instead of a simple "go there, do that" approach that can become repetitive, there are many things that you can (or must) do during a mission beyond seeing if you succeeded or not. The great variety of random events, even after you know them all by heart, ensures that no two missions will happen exactly alike. 

The varied menu of missions types to choose from, each of which can grant you great benefits if you know where and how to perform it, gives you options that can mold your strategy. Will you take a classic, albeit simplistic, approach and do only propaganda and diplomacy, spark rebellion; propaganda and diplomacy, spark rebellion; propaganda and diplomacy, spark rebellion? That might work. But what if you decide for a game heavy with espionage, striving from game start to learn all of the enemy's secrets to benefit from the knowledge? Or perhaps try to bring all the minor factions and sovereigns to your side? Or plant Rebel camps everywhere until you run out of Rebel camp markers, and have them do the dirty work for you? Or, perhaps the best approach, a bit of everything? But how do you find the balance? Questions, questions, questions... 

In DWTE one of my main goals has been variety. I want every game to be different from any other. The characters and items you get at start, the monster that occupies every planet, the location of minor factions seats and Imperial secret facilities, the time and location for the appearance of planetary sovereigns and treasures, all of this is variable. This may lead to the occasional lopsided game where one side gets all the advantages from game start; but that should be uncommon, and extremely unbalanced situations should be even rarer. Things should even out as the game progresses; but even if they don't, well, life is tough. I'll rather accept the eventual unbalanced game than lose the variety factor. Of course, if play balance is really that important, such as in a tournament, some conditions can be set. 

As with any other game, the purpose of DWTE is to have fun. I hope that you enjoy it as much as I enjoyed designing it.

Charles E. Duke

Guatemala City, Guatemala, August 2006.

!''APPENDIX D. PLAYER'SNOTES''

''Imperial- General Comment ''

First thing to consider is set up. You should spend the minimum in GDN's, the minimum being placing a level 0 GDN on every capital, and a level 0 in two or three key locations in each district. The space patrol and garrison requirements mean that you have to buy a lot of conscripts and sloops, and that most planets will contain only these weak units at game start. A suggested distribution for the average district (not all of them have the same number of planets) is eight (1-2) conscripts, three (2-4) 2
^^
nd
^^
line, one (3-6) 1
^^
st
^^
line and one (4-8) Stormtrooper. It is not a good idea to buy too many elite units at start or in the early game because of the upkeep, but you still want to have at least one per district in order to create a real threat for Rebel teams. The starship distribution is equally austere; four (1-2) sloops, two 2-6 destroyers, one 3-6 light cruiser and one 4-8 heavy cruiser. Practically all the units that are better than a conscript or a sloop must be set up on the capitals.

At first, your characters should be doing the same stuff as the Rebels, mostly P&D and CdE to bring planets into less unrestful attitudes, plus the occasional  InS or PeF that may be opportune. The military leaders like Totem, von Vonder and Gamelin can fill out any of the teams until their military skills are required (which may be pretty soon). Thereafter they should be stacked on military units, slugging it out with the Rebel scum.

If you plan to discover the Rebel major secret base, you should start early, concentrate and persist on it, and know that it is an all or nothing decision. Otherwise, it is probably not worth the effort and can cost you the game, because your teams will not be doing other important missions, giving the Rebels control of the diplomatic arena. Perhaps the best time to do this is when you get a good headstart early in the game (such as a prisoner or a couple of secret-revealing Stellar Events). It may be a good idea to let the first planet that goes into rebellion "slip" from your hands into Concordance ownership, as that will allow espionage missions there. Going after minor secret bases, on the other hand, is always a good idea when you get a chance.  

One thing that might discourage an Imperial player new to the game is that he can feel that he is losing when many planets are lost to rebellion, but remember that this must happen unless you have been incredibly lucky. The objective here is not keeping every planet loyal, but delaying the inevitable as long as possible, throwing wrenches into Rebel plans and intercepting their projects at every possible turn. Rebel victory (300 victory points) is usually reached only when the entire Empire is in a shambles. A game can end with the Imperial fleet broken and fleeing, the Emperor and other characters hiding, Rebels everywhere and even occupying Earth, and still an Imperial victory. Because it's not enough for the Reb to occupy your planets, he has to convince the people to join him.

Even if you have an impressive military might, you'll find that it mostly can only react to Rebel moves and actions. It's a good idea to keep your best forces in capitals with the good generals stacked on them, so they can rush to planets that go into rebellion. This may be the only chance you get to trap enemy character teams, when they are still on a planet that they just instigated to rebellion. If you have enough units to spare, you can send in Elite units, Special Forces detachments, Marshall Totem, the works, with massive forces in the Orbit box. If the Rebels are detected, they are really in trouble. 

You should also strive to exterminate every last Rebel unit that sprouts from a rebellion. Any scum that escapes will come back later to cause you trouble.

Use the Initiative intelligently while you have it. You usually should choose to move last, so you can react to any Rebel moves and attempts to "liberate" planets in rebellion. However, immediately after a rebellion you might need to move first in order to trap the Rebel forces and destroy them. This leaves you open to a Rebel liberation attempt; that is, the Rebel player may try to use his meager forces to clear a planet in rebellion from your garrison, thus causing it to become Concordance in the immediately following Concordance Allegiance phase. You should take measures to prevent that by defending those planets adequately while you can. 

The Empire may seem to have unlimited resources, but you should save some rp every turn. By the middle of the game you will probably find your resources dwindling as planets go into rebellion, and also you will be forced to use "economic diplomacy" (tax exemptions) more frequently to try to keep those unrestful planets in your hands.

This discussion would not be complete without the Moloch. It is controversial if this unit is worth its cost. The fact is, in some games it is the crucial unit, wiping out Concordance planets and bringing about victory, and in others it doesn't do zit. And of course, once you start using it you can be sure that the Rebel will come after it with a vengeful surgical strike. The decision to build it is up to you; there is no denying that those 70 rp could be used for a lot of other (perhaps more valuable) things. 

Killing a planet is not a lightly made decision, even for your blackened heart. The 3
^^
rd
^^
degree SWE is something to be considered. Also, you might not want to crush a planet that has a friendly faction seat on it. You probably should destroy at least one planet in order to get the favorable modifier for pacification, though.

As the situation worsens, it may become too dangerous to have weak garrisons on every rebellious planet; they are an invitation for Rebel invasions, and in risk of being gobbled up. At a point you must decide which planets to let go, starting with those that will produce minimal SWE's.

Accept that you can't hold on to everything. The end game will usually find you receding into the core of the Empire (the Central District and the capitals, plus a few key planets). Don't dismay, keep on doing your stuff, try to defeat the Rebels militarily whenever you can. If the victory points are 299 or less, you win!

''Rebel- General Comment''

From the start you should be trying to move planets to unrest +3, then rebellion. However, you shouldn't just go to a planet, do P&D, do SpR, go to another planet, do P&D, do SpR, etc. Instead, you should work the Shockwave effects and try to place several racially-linked or same-system planets into high unrest before sparking a rebellion. That way, you force the Imperial to fight and garrison the planet, lest it go into Rebel Allegiance and cause new uncontrolled rebellions across the Empire. This need to hold onto planets that could generate dangerous SWE's is the Imperial's greatest weakness. Your forces can harass his garrisons, forcing the enemy to fight for the same ground again and again, getting attrited in the process.

Your teams deserve the best; as soon as possible you should get them better spaceships. Get rid of the "garbage can", the Orbital Lighter, ASAP. It is really vulnerable even against minor Imperial defenses.

It is usually a good idea to plant many Rebel cells early in the game. Even though limited in use, they expand you mission capability considerably. 

Unlike the Imperial, you have the number of teams to engage in practically every aspect of the game that needs attention: Factions, sovereigns, treasures, sabotages, etc. Take advantage of everything. 

Build the minor secret bases early. They provide much needed havens for those few Rebel units that can escape rebellious planets after the expected Imperial reaction. Also, they dilute the chances that a random revelation of secret facts will disclose the major base to the enemy. 

The sallying forth of your secret army should be done at the right moment; not too early, not too late. You probably want to do it when you have built most of your countermix, but the big New Hope army should be formed primarily of elite ground units and capital starships. You can always buy the small stuff in minor bases and friendly planets, as well as in new rebellions. Don't be deluded: Even your big force can't just crush the Imperials, and it needs to be used intelligently. This is probably the point where you have to take the generals like Tlaniel, Smith (if he has defected) and Mardok out of team duty and leave them thereafter exclusively in command of military forces. Jonathan Barnard is probably too valuable as a mission team asset to be assigned a permanent command, but he can be called upon to lead the occasional battle. 

One important thing to remember once you have some military units and you are moving last is that if you occupy with your forces a planet that will be taxed next turn (while no Imperials are present therein) the planet is controlled by no one. Therefore, the Imperial can't tax it, he can't decrease its unrest by not taxing it, he can't even upgrade the GDN! 

Even after you "go military", you still need to keep on focusing on character missions. Remember, there is still a long way to go in the political arena. The troops cannot put planets into unrest and rebellion by themselves! However, you will probably notice that the Imperial forces are now frequently too busy to bother with your teams; you can go to places that used to be too "hot" for comfort. Although the capitals themselves will very rarely fall, you can aim to put into rebellion and/or Concordance almost every other planet in a district.

''Faction Attraction''

Some players tend to consider minor factions precisely that; very, very //minor. // A distracting sideshow, nothing more than chrome, and so on. In this section I will try to explore the ins and outs of the factions, and hopefully by the end of it I will have convinced even the skeptic reader of their real potential.

Ideally you would like to put the maximum pressure on all ten factions and bring them all to the most favorable commitment level, but one simply cannot attend to every aspect in the game (especially the Imperial player who has less characters) so you need to choose and pick. 

With average activity one could expect to see four or five factions heavily, or fully, commited to the Rebels during a game, and two or three to the Imperials, but this of course will vary wildly depending on the relative importance that each player gives to the activity of persuading the factions, which of course implies not doing something else...

You should have a plan from the beginning of the game and try to gain as soon as possible those factions that you consider crucial to your overall strategy. Players naturally gravitate to those factions which are sympathetic to their cause and tend to leave those inclined towards the enemy alone, since they usually have unfavorable modifiers for the PeF mission and frequently don't give their side any direct benefits. However, sometimes you will need to react to the enemy's moves in this area, mainly to try to deprive him of juicy benefits that a faction gives him, or when it has become a real nuisance to your forces.

Aside from the gameplay advantages, the factions represent a potential -24 victory points for the Imperial and +20 victory points for the Rebel, if either player were to swing all of them as far as possible to his side. In other words there are 44 victory points in play, because if the Imperial were to gain the -24 vp level, the Rebel would not only lose his potential +20 but also the 24 that are subtracted from his total!

A given side swinging all to his side as we said is unlikely, and normally factional + and &ndash; modifiers tend to mutually cancel, but it is clear that a player that gets ahead in faction persuasion will balance the victory (and initiative) points to his advantage. This may seem as peanuts, since three planets in rebellion are worth more than all the factions being as pro-Rebel as possible, but in a close game it can mean the difference between victory and defeat. 

So are the factions important? Yes. How important? That's up to you and your strategy.

''The Adim Agnot Society:''

The Agnot along with the Bounty Hunters allow the Imperial to exert a low-intensity but constant pressure on the Rebel teams. The importance and effectiveness of the assassins depends on the relative importance that each of the players ascribes to the Society, as well as //LUCK// . The beauty of DWTE is that no two games play exactly alike; in some games the Agnot can be a critical factor killing several Rebels, and in others it might do nothing at all.

In a game as variable as this one calculating probabilities is especially difficult, but we can give it a try by establishing a "perfectly average" scenario to use as a guideline. 

Let us assume that the target character of an assassination contract will be detected half of the time, giving a -1 drm for the Agnot search d10. This means that half of the time it will be found with a  result of 1, and the other half with 2 or less. This implies that //on average// a contract will be resolved on the fourth try, or turn, after it is activated. This statement has no predictive value; naturally the search could be successful in the first, second, third, fifth, or twentieth try. It is only for statistical purposes.

However, it is not being pessimistic to assume that the harried Imperial teams will not always be able to immediately renew a contract as soon as a slot is free. Supposing that they will delay a turn every time before renewing, this adds a turn to the process and means that on average an Agnot attack will occur every five turns. 

Let us suppose that the Imperial player makes no effort to improve his relations with the Society, and neither does the Rebel, leaving the commitment at -1. If the Imperial player always keeps a contract active, and assuming that contracts will likely not be made in the chaotic end-game turns, //on average// he will get 5 Agnot attempts in the game. Since an attempt has about 15% chance of success (barring unfavorable modifiers), there is a 44% chance of no Rebel dying during the game, 39% of one Rebel dying, 14% of two, 2% of three, and minimal chances of four or five dying (the chance of killing five is actually 1 in 13,000!).

Now let us suppose that the Imperial on turn one decreases the commitment level of the Agnot to -2, it remains so for the rest of the game, and the Empire always keeps two contracts active (within the constraints given above). An average of 10 attempts will occur in the game, and there is a 20% chance of no Rebel dying, 35% of one Rebel dying, 28% of two, and 16% of three or more. 

The above examples give us a rough idea of what one can expect of Agnot activity. Of course, in an actual game the Imperial might not find the chance to influence the Society (with so many things needing to be looked after), his PeF missions might not go as smoothly as expected, he may find himself without money for the contracts later in the game, the Rebel will surely react with persuasion or a raid if the Agnot is pestering him too much, the Emperor's crackdown Stellar event might happen early in the game... As a guess I would say that with moderate attention from the Imperial, the Agnot can be expected to kill about one Rebel per game. Worth the effort? I say yes. Fun? Absolutely.

Should the Rebel player contract Agnot assassinations when able? Well, the chances of scandalous discovery are low, and you can always refrain from from striking in sensitive locations, so why not? Explore your dark side... 

''The Avsari Order: ''

The Avsari faction holds potential great benefits for the Rebel player, including at best a planet in Concordance control and a +4 commitment, for a total of 14 victory points. There is also the possibility of gaining one of the two best ground units in the game, the Avsari Legion 8-8 (the other great unit being the Imperial Guard  6-12).

The Imperial's interest here is to deny the above to the Rebel, and potentially even to get a nice &ndash;3 victory points.

Whenever one side begins to act upon the Avsari it is very likely that the other will react immediately, resulting in the fascinating situation of two enemy teams sharing the neutral ground of Avsar and vying to get the High Council to see their point of view. Typically, because of better diplomats and the unfavorable modifier for Imperial PeF missions, the Rebels will slowly gain the upper hand. But the Imperials can make a valiant effort to stave off the inevitable for as long as possible (the same that they have to do everywhere).

Many Rebel players feel that they have to gain the Order's commitment ASAP before an Imperial Crackdown Stellar event occurs, in order to gain the Avsari Legion. However, if you commit the Order too early in the game it is more likely that the Imperial player can react devastatingly and destroy your precious Legion anyway...

A wise Rebel player will wait until the general situation is ripe to commit the Avsari, probably in coordination with rebellions elsewhere. You can rely on the fact that a particular Stellar event has only a 33% probability of appearing in any given game, and only 16.7% of doing so in the first half of the game. Chances are that even if you wait, the Crackdown will //not// interfere with your plans. A gamble of course, but what isn't in DWTE?

''The Barbarians: ''

This faction probably is the one that gets less attention, although it represents a potential +4/-4 victory points plus some military units. But the possible invasion, the unrest shift and perhaps a feeling of contempt towards the rat barbarians seem to discourage players.

But this faction has its advantages. The Imperial could make good use of the Barbarian hordes, especially in the late middle game when he finds his Army stretched thin to garrison all those rebelling planets. It is also in Imperial interest to get the Minoplisian faction to commit before a Barbarian Invasion occurs, since this event usually hurts the Empire more than the Rebels. But the Empire can ill afford the unrest shifts, and must try to go for commitment only when the impact will be small.

The Rebel player on the other hand benefits more from waiting to see if the Invasion comes about. The hordes are more likely to kill Imperials than Rebels, and Barbarian occupation of Imperial planets will increase unrest, forcing the Imperial to do something (and doing something usually means more Imperial casualties).

However, later in the game the Minoplisians may begin to look more attractive for the Rebels. +4 victory points don't hurt. Besides, an Invasion at this stage could actually be hitting more planets in rebellion or Concordance control than Imperial. Finally, if the Minoplisian Minority's planet is already in rebellion or Concordance, likely in the late game, the negative unrest effects will be minimal or nil. Incidentally, this also benefits the Imperial player.

''The Bounty Hunters Guild: ''

Bounty hunters hold a charm for many players, no doubt influenced by the notorious Boba Fett from //Star Wars. // In DWTE they present an opportunity for the Imperial player to keep some fire under the Rebels. 

How effective are they? It is hard to figure, but as we did with the Agnot, we can propose an ideal scenario for purposes of analysis.

Let us assume that the Imperial will increase the bounties as fast as possible and keep them high. Also, assume that neither side modifies the Guild's commitment and it remains at &ndash;2. Let us consider 10 Rebel teams active, each of which is detected half of the time, and always completes its missions having performed five field activity steps. This means 50 field activity (FA) steps per turn.

3% of FA steps will generate a bounty-hunters random event. In 50 steps, an average of 1.5 such events will occur. 75% of these events will result in an actual attack, or 1.1. Let's say one per turn.

40% of the attacks will be abduction attempts, and 60% raids. Let us assume that bounty hunter activity will be low in the first two and last two turns of the game. This leaves 26 turns, or 26 bounty hunter attacks. So about 10 abduction attempts and 16 raids will occur in our "averaged" game.

The effects of raids are very hard to predict. They are similar to the monster, angry civilian and soldier encounters that Rebel teams face (and survive) all the time, but the typical raider team of three elite soldiers attacking with surprise is tough and can result in an occasional disaster for the Rebels. Don't discount raids, they may bring you in a scum for interrogation when less you expect.

Abductions are easier to analyze. They attack a randomly chosen character, therefore frequently you will be hitting one with some kind of disadvantageous (for the bounty hunter) modifier. This means that in those unlucky situations the chances of success will be only 5% instead of the usual 10%. Let us say that this will happen half of the time, so the average probability of success in an abduction is 7.5%.

With 10 attempts in an average game, there is a probability of 46% that no Rebel player will be abducted in a given game, 35% of one Rebel being kidnapped, 17% of two, and 2% of three or more. On average 0.7 characters will be abducted, or less than (but close to) one per game. If we add to this the chance (that I humbly recognize that I can't calculate) that a raid will capture a Rebel, I dare to say that one could expect on average to get one Rebel prisoner per game from bounty hunters. 

The cost of building and mantaining the bounties offered purse is about 18,000 sc (or 18 rp) in a typical game, assuming that you mantain the purse at its most efficient level (5,000 sc which give the maximum bounty number of 5, and that requires exactly 500 sc to replenish the decay every turn). This may seem stiff, but distributed along an //entire // game, I think that it isn't that expensive. And you can always recover the purse if necessary, which normally means 5,000 sc, so the real loss amounts to only about 13,000 sc.

Rebel bounty hunters, when they are available, are less effective than Imperials due to the Guild's commitment never being better (for them) than zero. This means that Rebel bounty hunter random events will be carried out only about half of the time (assuming that the Rebel keeps the bounties offered purse at maximum). I like to take the chance when it comes, regardless. Imperial teams tend to be weaker than Rebel ones, and a raid can really hurt them.     

''The Hyper-Mafia: ''

I love this faction. They can work with either side with the same ease, but will commit fully to neither. They have no loyalty



you might think of them as you eternal associates, but the enemy can sway them to his side the moment you look away. They got lots of tax-free dough to give to those who befriend them. If they are on your side, you'll be sorry later because of the commitment level being reversed for victory purposes... But I'm quite sure that you do as the faction description says, "worry about it later".

Aside from the money, the Esp modifier is very useful; in the early-to-middle game for the Rebel and in the middle-to-late game for the Imperial (if he is actively searching for secret bases). If the Rebel can have both the Mafia and the Free Traders on his side, he can have a whopping +7 modifier for Espionage!

This is one of the few factions in which both sides usually have a keen interest. You only wish that you could disassociate from them in the last turn. Too late! 

''The Legion of Fortune: ''

The mercs have little to offer in victory points or special abilities. They are all about business; the business of //WAR.// 
The Imperial player finds the legionnaires useful around the middle of the game when all his countermix has been built and he still can't cover everything he wants. The Rebel on the other hand would like to have them in the late game to support his Great Invasion. The question is who grabs them first, and many times the motivation to hire them is mostly to deny them to the enemy.

I consider the commitment range of the LOF rather irrelevant, both from a victory as from a cost-of-hiring points of view. I don't think it is worthwhile to have a team spending one, two or more turns swaying this faction for such minimal gain. The LOF's commitment usually is modified when a brigade is lost, which almost inevitably happens. This is sort of a play-balance thing, because after one side hires the mercs and loses them, they will be more sympathetic to the opponent.

Although they might seem a bit pricey, legionnaires are well worth the cost of hiring. Their elite status, brigade-size and firepower are very useful in all kinds of situations, including search for enemy characters. It is a waste though to hire them and then let them sit in a secret base or capital.

''The Pirate Princes: ''

The random assistance from Pirate brigs in Space combat can be a big boon for the Rebel, especially after the Great Invasion, and their rp contributions are welcome too. However, with the Princes I depart from the general rule that money-giving factions should be commited as early as possible. 

The Empire can do real harm to the faction if it proposes to, so it might be wiser to have them keep a low profile until the middle game. Hopefully, if the busy Imperial player sees no direct threat from the Pirates he will leave them alone, and later in the turmoil of rebelling planets it is less likely that he can afford the operations of discovering and then raiding the Cove.

''The Slavers Cartel: ''

The most pro-Imperial of pro-Imperial factions, and the most profitable. The Imperial would like to improve the commitment to &ndash;3 ASAP, therefore gaining 6 rp per turn.

The weight that this noble institution will have in the game depends a lot on luck. If it appears on an unstable planet like Einstein or Ercoth the Imperial can kiss it goodbye. On the other hand, if it appears near a capital the Empire is practically assured of 6 rp per turn for the entire game.  

''Para-Characters Are People, Too''

You like me must feel that your characters just can't cope with all that needs to be done in a typical DWTE game. Fortunately there exist little helpers that can take part of the load; the para-characters. 

Like minor factions, para-characters tend to be disregarded by some players. Admittedly neither of them will //win// you a game by themselves, but they are part of the jigsaw puzzle and contribute their small part to the whole. If you see it that way, everything in the game is just a part of the big picture; characters, military units, economics, minor bases, etc. In DWTE the player who learns to extract the most from every little piece will come out victorious.

Unfortunately for the Imperial, his disadvantage in number of characters extends also to para-characters. The Rebel can count on cells and camps (the most effective paras), one special forces team, and sometimes also with Agnot adepts, the assassin droid and/or bounty hunters. 

The Imperial on the other side usually has the Agnot, the bounty hunters and two special forces teams. But Imperial SF teams tend to have less to do; most of the game there is nobody to rescue, nothing to sabotage, and no Concordance planets to steal resources from. 

''Rebel Cells and Camps: ''

The Rebel camp is the para-character mission generator //pour excellence.// They can perform most of the missions that character teams can, and have a half-decent chance of success in most. 

When guerrillas are well-established in a country in the real world they can do many things in their turf, and so it is in DWTE. Aside from their "search and destroy" capability against detected Imperial teams, perhaps the most useful aspect is the ability to perform coups and P&D (although in their case it is probably more propaganda than diplomacy). 

Rebel Camps can be real pests, and a good Imperial player will always take pains in suppressing them. An Imperial who just lets the Rebel guerrillas be deserves what they will do to him.

There is not much to say about, or do with, Rebel cells. I see them as no more than baby camps, and try to upgrade them as soon as possible. 

''Special Forces Teams: ''

As I said above, Imperial SF teams usually don't have too many missions to perform. Their usefulness lies more in "search and destroy" against Rebel teams.

The Rebel Space Dragons face more choices. Some players refrain from using them in fear of the failure check that might damage the detachment; let us see what the chances of damage really are.

Assuming that no inconstant modifiers apply to the mission, a special forces has the following probability of failing:

	Rescue		70%

	Sabotage		80%

	Steal Resources	85%

If failure occurs, there is a 1/6 chance of damaging the detachment (16.7%) so the probability of a mission ending with damage is:

	Rescue		12%

	Sabotage		13%

	Steal Resources	14%

On average, 13%. Assuming that the Dragons are built around game turn 6, if you perform a mission every turn (except the first, when you built the detachment), you will receive damage 4 times on average. Assuming that as a good player you refit a damaged detachment immediately rather than risk its destruction, the average cost of refitting special forces along a game amounts to only 4  rp. Weigh that against all those sabotages, rescues and resources stolen that you will get by frequently using your Space Dragons. Is there any doubt left on your mind? Use them!

It is a good idea for the Rebel to place at least one of his minor secret bases within two distance factors of Earth. That way your special forces can attempt rescues there (the most likely place where prisoners will be taken).  

''The Adim Agnot''

: Most of what can be said about the Agnot was covered in the previous section. We will only repeat the conclusions we drew there, that one can expect on average one enemy character to die per game if contracts are constantly kept and renovated. This may seem little, but in a game where killing enemy characters is so hard, I welcome that. Especially from a peripheral faction and at a relatively small cost.		 

''The Assassin Droid: ''

This little bugger is a real threat to the enemy in the hands of anyone lucky enough to draw it. It is actually more efficient than an Agnot adept, and about half as effective as the master killer Max Proctor. The big advantage is that you risk nothing (except the item itself, of course) while using it. 

Many players, however, may prefer to keep it indefinitely as a "watered-down combat droid", especially the character-starved Imperial. This option has the added advantage that the droid still functions as a threat, since you could change your mind anytime. 

''The Bounty Hunters: ''

Unfortunately, bounty hunters cannot choose their target. This means that frequently they will be attempting to abduct characters with some negative mission modifier, and therefore their chances of success will be reduced to the minimum 5%. The bright side is that hunters strike frequently and can be a constant danger to the enemy. See the discussion in the previous article for an in-depth analysis of this.

''Para-character Mission Basic Mission Totals: ''

The table below gives the basic MT of all para-character missions including constant modifiers (Rebel camps are always on their home planet, for instance). Inconstant modifiers are not taken into account (such as unrest level for a P&D mission), since they are unpredictable. This is only a guide; players should always calculate the exact MT of a para-character mission based on the given FASC and all modifiers.
<table width="623" cellpadding="9" cellspacing="0"> <col width="53"/>
 <col width="73"/>
 <col width="73"/>
 <col width="73"/>
 <col width="73"/>
 <col width="73"/>
 <col width="73"/>
 <tr valign="top"> |

   |''Rebel  Cell'' |''Rebel Camp'' |''S F'' |''Adim Agnot'' |''Asn Droid'' | ''Bounty'' ''Hunter'' |
 |''Abd'' |''-'' |''-'' |''-'' |''-'' |''-'' |''2'' |
 |''Asn'' |''-'' |''-'' |''-'' |''3'' |''5'' |''-'' |
 |''CdE'' |''-'' |''3'' |''-'' |''-'' |''-'' |''-'' |
 |''Esp'' |''2'' |''4'' |''-'' |''-'' |''-'' |''-'' |
 |''InD'' |''-'' |''4'' |''-'' |''-'' |''-'' |''-'' |
 |''InS'' |''-'' |''5'' |''-'' |''-'' |''-'' |''-'' |
 |''PeF'' |''-'' |''4'' |''-'' |''-'' |''-'' |''-'' |
 |''P&D'' |''-'' |''5'' |''-'' |''-'' |''-'' |''-'' |
 |''PRC'' |''-'' |''6'' |''-'' |''-'' |''-'' |''-'' |
 |''RaM'' |''-'' |''4'' |''-'' |''-'' |''-'' |''-'' |
 |''Res'' |''-'' |''4'' |''6'' |''-'' |''-'' |''-'' |
 |''Sab'' |''2'' |''4'' |''4'' |''-'' |''-'' |''-'' |
 |''Ste'' |''-'' |''2'' |''3'' |''-'' |''-'' |''-'' |

                     ''The Best Person For The Job''   The modifiers to FASC that the various characters enjoy for each different mission are given below. Home, nobility and conditional modifiers are not taken into account, as they have limited application (even though at times they can be substantial). Exception: The Emperor's condition as nobility on every planet has been included in the calculation, since it has almost universal application. Only characters with the most outstanding modifiers for a given mission are listed; of course there are many other characters that can still be considered "good" for this or that mission, but their abilities fall a bit short of those listed, and they are not included for the sake of briefness.   ''Abd ''   Gatta Baben		3   Mas Edwards		3   Dram Prois		2

Jonathan Barnard		2

''Asn ''

Max Proctor		4

Mon Vakvilo		2

Jon Barnard		2

''CdE''

Lord Anaxim		4

Jonathan Barnard		4

Lien Glon 4

General Tlaniel		3

Odette Gamelin		3

Emeterio Garcia		3

''Esc''

Tamara Stargazer		5

Illian			4

Alex Weber		4

Jonathan Barnard		4

''Esp''

Tamara Stargazer		6

Vavosi Shushi		5

Mon Undite		4

Alex Weber		4

''GeR''

Alex Weber		14

Enia Bedor		9

Onioc			8

Katina Fedorova		7

Ignatius Sote		5

King Janidel		4

''Hid''

Alex Weber		4

Tamara Stargazer		4

''InD''

General Mardok		8

Brent Smith		5

General Tlaniel		4

Jonathan Barnard		3

Mas Edwards		3

''InS''

Lien Glon		7

Pantaleon IX		6

Jonathan Barnard		5

King Moomer		5

Pantaleon of Armes	4

Tookool Eet		4

Mas Edwards		4

Lesard Ketres		4

Katanga Makimbe		4

''PeF''

Lien Glon		5

Lesard Ketres		4

Felicity Mahoney		4

Katrina Fedorova		3

Pantaleon of Armes	3

Jonathan Barnard		3

Mas Edwards		3

Katanga Makimbe		3

''PRC''

Koolet Ison		8

General Mardok		4

General Tlaniel		4

Jonathan Barnard		3

Mas Edwards		3

''PrI ''

Lao Chang		6

Dr. Sote			5

Vavosi Shushi		5

Alex Weber		4

Linori Lindi		4

''P&D''

Katanga Makimbe		6

Lien Glon		6

Pantaleon IX		5

Illian			5

Lesard Ketres		5

Mas Edwards		4

Jonathan Barnard		4

Tookool Eet		4

Lord Anaxim		4

Katrina Fedorova		4

''RaM''

Felicity Mahoney		4

Lesard Ketres		3

Jonathan Barnard		3

''Res''

Brent Smith		5  

Tamara Stargazer		4

Jonathan Barnard		4

Lalejo Chan		4

Machumen 4

Franco Giovanelli		4

Neo Scales		4

Gatta Baben		4

Marshall Totem		4

''Sab''

General Tlaniel		4

Tamara Stargazer		4

Mas Edwards		3

''SpR''

Jonathan Barnard		3

Koolet Ison		2

General Tlaniel		2

General Mardok		2

Mas Edwards		2

Prince Bodoke		2

''Ste''

Agelat			4

Tamara Stargazer		4

Franco Giovanelli		3

Jonathan Barnard		3

''Surgical Strike''

Neo Scales		9

Mon Bulma		6

Agelat			6

Selrach Ekud		6

Brent Smith		6

Jonathan Barnard		5

Mas Edwards		5

Felicity Mahoney	4  
//Viper MkIII		6//  
//Hawk of Chiron		5//  
//Consular Transport	4//  
//Solarian Flying Disk	3//     

''Pacification''

Brent Smith		4

Marshall Totem		4

Gunther von Vonder	3

Odette Gamelin		3

Arthur Scaldseke		3

!''APPENDIXE. MONSTERS''

''COMMON MONSTER''
<table width="1244" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="985"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Security Robot'' |This planet relies heavily on robots for security. Roll a d10 on each occasion to see which you meet (melee is ranged):   ''1''  A walker (a large monster of steel and wire with great firepower). STR=7, END=8.    ''2-5 ''  A combat android; its STR=3 and END=6.   ''6-7''  Two combat androids.    ''8-9 ''  A hovering stalker; its STR=4, END=4 and AGI=4 (avoidance 1).   ''10  '' 
Two hovering stalkers. The melee is ranged.
		|

''ATMOSPHERIC''
<table width="1244" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="985"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Wind Blast'' |The air currents on this planet occasionally acquire hurricane speed for a few seconds. Each character suffers d6-3 hits. |
 |  ''Cloud Dragon'' |A huge flying lizard. STR=10 and END=10. It breathes flames, so the melee is ranged.     |
 |  ''Cardassin Fireflies'' |Strange little light creatures that hover in the air currents of this planet in huge colonies. No combat occurs; the flies are more of a nuisance than a threat. They cause the team a negative modifier to this mission's FASC equal to a (d6-3!). |
 |  ''Flying Leech'' |A strange snake-like being that flies by creating an antigravity field. It attacks one organic character and fixes itself upon it, suctioning vital energy. The character suffers a hit point at the end of every round until the monster is killed, and cannot fight nor flee since it is paralyzed. The END of the leech is 6.    |
 |  ''Bats from Hell'' |This planet is infested with strange flying beings, called bats by the first humans to see them, but they have no eyes or legs and have three wings.  The team is attacked by d10# monsters with STR=1 and END=1. |

     ''HEAT'' <table width="1244" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="985"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Meteorite Shower ''   |Meteorite showers fall randomly on this planet. One RaS character must roll its AGI or less with a d6, or be grazed by a meteorite for 3 hits. The guy is lucky, however: A direct hit would have been fatal! (Unless it had low hit points to begin with...) |
 |  ''Fire Vents'' |Fissures in the ground venting steam or flaming gases are all over this planet, and they delay the characters to the tune of a -1 modifier to FASC. |
 |  ''Magma Creature'' |A strange, vaguely humanoid being formed of what seems to be semisolid magma. STR 4, END 8.    |
 |  ''Flamers'' |A natural phenomenon, these weird balls of fire sprout from the ground and float around until they fizzle. When they come near a character, for some unknown reason it attracts them like a magnet. The team stumbles upon 2d6 flamers, each of which attacks once with STR 1. No disengagement, screening, or firing back allowed. |
 |  ''Electroreeba'' |This is a gaseous being which has no STR or END as such; it causes 1 hit to each character in every combat round, due to electric shocks, until each manages to disengage separately using row 0 (active) of the Disengagement table; Prepared disengagement is not allowed. |

     ''ICE'' <table width="1240" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="980"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Avalanche ''   |  The snow on this planet forms avalanches of tremendous force. Every character must roll its agility or less with a d6, or suffer d6-1&deg; hits from the snowslide. |
 |  ''Snow Ape'' |  A carnivorous, white, fur-covered ape with horns. STR=5 and END=6. |
 |  ''Caracara'' |  A humongous slug, tunnels the snow and ice to hunt for warm-blooded prey. STR=6, END=8.    |
 |  ''Ice Lynx'' |  A feline-like predator which blends with the snow and attacks by surprise. STR=3, END=4.    |

     ''SEA'' <table width="1240" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="980"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Alfak ''   |The sea currents on this planet occasionally form currents and whirlpools of tremendous force. Every character must roll its agility or less with a d6, or suffer &frac12; d6 hits. Exception: Aquarians and Tritonids are immune. |
 |  ''Tiburtius'' |A big fish with a great maw and sword-like teeth. STR 6 and END 6. |
 |  ''Neokraken'' |A giant octopus-like monster, with STR 8 and END 8. |
 |  ''Corellian Piranhas'' |A shoal of voracious fish; d6+6 creatures with an STR and END of 1. They only attack organic characters, and screening is not allowed. If one of them manages a hit on a character, it is sated by the mouthful of meat and leaves. |
 |  ''Giant Amoeba'' |This monster is a gelatinous blob that floats and slithers in the seas of the planet. It is almost invisible so it attacks by surprise. Its STR is 4 and END 14, and no disengagement is allowed, as the creature sends pseudopods all around the characters until killed. |

        ''STATION'' <table width="1240" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="980"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Friendly Innkeeper'' |The Rebel side has a very influential friend, Quart, the owner of the station's most important Inn and Pub. He seems to always be around when your teams most need it. The Imperial side will never benefit from this friend and instead will be attacked by a combat android (STR=3, END=6, ranged melee). Rebel characters do not remain in jail on this station (they are freed in the following Missions phase). In addition, this good friend will give some aid every time you meet him (a maximum of once per mission), by rolling a d10:   ''1 ''  A mulligan card.   ''2 ''  An item.   ''3-5''  2d6 credits.   ''6-10 ''  Aid /info which grant you a +1 to the mission FASC. |
 |  ''Duct Snake'' |A one-eyed snake-like creature lives in the ducts and sewers of the station, eating refuse and the occasional hapless humanoid. STR 5, END 4.    |

     ''CITY '' <table width="1244" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="985"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Disease ''   |Strange fever endemic to the planet; most locals are immunized. Every organic character becomes grievously wounded. If Dr. Fedorova, Dr. Sote or a Medical Droid is present, the hits received by each character are only those needed to reach wounded status. Once a character has suffered this planet's fever, it will be immune to it for the rest of the game; a written note of this fact is suggested. |
 |   ''Heavy Crowds'' |This planet has not adequately managed its vehicular and/or pedestrian traffic. Roll a d6-3! for the severity of the problem on each occasion. That number is subtracted from this mission's FASC, due to lost time. |
 |  ''Pollution'' |Imperial corruption is to blame. Pollution has not been adequately prevented here and the characters (including mechanic) suffer, not being used to this primitive condition. Each receives one hit. |
 |  ''Great Attractions'' |This planet has so many terrific tourist attractions, which are famous throughout the Empire. Some or all the characters in the team inevitably gravitate towards them and are distracted. "Come on boss, a day at the Interstellar Fair won't do no harm, besides it will help our cover..." Spend d10 credits per character and apply a -1 modifier to this mission's FASC. |
 |  ''Lawyer's Paradise'' |  This planet is loaded with hundreds of weird and extravagant laws and regulations and the police and judges are especially strict in their application. Offworlders easily stumble upon one ordinance or the other and end up in deep doodoo... Oops, guess what: Your team just did! Roll a d10:      ''1-5''  pay a fine equal to 2d10.      ''6-9''  One of the team members ends up in jail (see 5.5.d).     ''10''  All of the team members end up in jail!    |
 |  ''Strange Trees'' |This planet has weird indigenous trees, beautiful but poisonous, planted in the parks and along the streets. The locals know to avoid them, but a random team member accidentally touches one and receives hits equal to &frac12; d6 (fru). |
 |  ''Poisonous Pests'' |Even cities of the future can be infested with bugs and critters. This one is. A randomly selected organic character is bitten by an Auroran scorpion, an Artordian cockroach, or whatever. It becomes grievously wounded, due to the lethal poison. |
 |  ''Imperial Henchman'' |The Imperial side has a very powerful friend, the local mob's "godfather" who seems to always be around when your teams most need it. The Rebel side will never benefit from this friend and instead will be attacked by a combat android (STR=3, END=6, ranged melee). Imperial characters do not remain in jail on this planet (they are freed in the following Missions phase). In addition, the crony will give some aid every time you meet him (a maximum of once per mission), by rolling a d10:   ''1 ''  A mulligan card.   ''2 ''  An item.   ''3-5''  2d6 credits.   ''6-10 ''  Aid and/or info which grant you a +1 to this mission's FASC. |
 |  ''Sewer Creepers'' |The sewers of this planet are infested with a life form that has mutated due to chemicals in the sewage; d6# ferocious giant rodents with an STR and END of 2. Unless the combat ends first, d6# more will appear on the third and every subsequent odd combat round. |
 |  ''Feral Pets'' |The inhabitants of this planet keep an indigenous medium-sized caninoid as a pet. However, some of these mutts have escaped and formed packs that attack in the night. Their STR is 3 and END is 4, and &frac12; d6 (fru) of these attack on each occasion. |
 |  ''Gangster Hell'' |This planet is virtually under control of local gangs. Crime is rampant, and the team gets waylaid by d6# ruffians (STR 2, END 2). |
 |  ''Psychic Stalker'' |This planet has an evil secret society of psychics called the Necromancers. A humanoid with psychic powers attacks your team.  INT=6, END=4. The melee is a mental combat, using INT instead of STR. Furthermore, unless a character is an Avsari monk or master, or Linori Lindi, its INT is halved (fru) for the combat. Robots cannot attack, or be attacked by, the stalker. INT is not reduced by wounded status. |
 |  ''Robots Amok'' |Many of the worker robots on this planet have been infected with a virus that makes them go crazy at random times. One of them charges your team. Its STR=2 and END=4.    |
 |  ''Shapeshifter'' |A truly strange monster stalks the unwary on this planet. It is a shapeshifter, which looks like liquid mercury in natural state. It can assume the form of almost anything it sees, which gives it a great advantage and automatic surprise. STR 5 and END 8. Blows and lasers do not really kill the being, but they can deform its current shape enough to incapacitate it and allow the team to run away.    |

     ''NOXIOUS'' <table width="1244" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="985"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Radiation  Pocket ''   |Your team hits a particularly heavy radiation pocket, which even special suits can't effectively ward against. Every team member (except a Boroin) suffers 2 hits. |
 |  ''Invisible Stalker ''   |The monster absorbs light and can't be seen, which allows it to automatically surprise the team. Its STR is 2 and END 6. Furthermore, the STR of any characters fighting it is halved (frd) because it is so hard to target. Exception: The STR reduction does not apply to Avsari.    |

     ''UNDERGROUND'' <table width="1244" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="985"/>
 <tr valign="top"> |  ''MONSTER'' |  ''DESCRIPTION'' |
 |  ''Toxic Fumes ''   |Although most of this planet's caves have been adequately terraformed, some leaks of toxic gases occur in less-used corridors and passages. Each organic character suffers one hit. |
 |  ''Cave In'' |Seismic activity has intensified lately, and unstable segments of some tunnels tend to collapse. Every character must roll its agility or less with a d6, or suffer d6-3! hits from the cave-in. |
 |  ''Findull'' |A tunneling giant worm that sometimes emerges with a blast into a chamber or tunnel. It doesn't mean people harm, but the exploding rocks and debris cause each character d6-3! hits. |
 |  ''Nipe'' |This planet has an aggressive animal in its gloomy caverns that makes life... interesting. It is an eight-legged salamander, almost blind, but it can control time and make it slower for itself, therefore it hits with breath-taking speed. It automatically gets surprise over the team. Its STR is 2 and its END 4. Due to its speed it is hard to target; the STR of any characters fighting it is halved (frd). |
 |  ''Cave Crab'' |Sort of a giant arthropod, like a crab or scorpion, with pincers and armored exoskeleton. STR 6 and END 10.    |

     ''NATURAL'' <table width="1244" cellpadding="14" cellspacing="0"> <col width="201"/>
 <col width="985"/>
 <tr valign="top"> |  ''MONSTER'' </td>|The jungles of this planet are infested with a plant that has tentacles to grab victims and pull them into a digestive pouch to be consumed. A randomly selected organic character is grabbed by the plant. That character cannot fight; its friends must defeat the plant to liberate the victim. The plant's attacks are directed only to the grabbed character. If liberation is not possible (the character is alone, for instance), it dies. STR=2, END=8. |
 |  ''Insect Swarm'' |African killer bees are ladybugs when compared to the communal insect life form that exists on this planet. D10# insects with STR=1 and END=1 attack initially, and at the beginning of each subsequent combat round d6 more join the dinner party (your team is the dinner). |
 |  ''Tusked Leonid'' |A great feline with huge tusks. STR=7, END=8. If you kill it, sell the tusks for 50 credits. |
 |  ''Morkosaurus'' |A carnivorous dinosaur dominates the wild areas. The species is protected, but who protects you? STR=9, END=12. If you kill one, pay a 50 sc fine. If the team can't pay, it goes to jail! |
 |  ''Tobori Bull'' |The male of a huge local horned herbivore species, it attacks strangers on sight. STR=6, END=8. |
 |  ''Riuken'' |A middle-sized saurian comes out of hiding and strikes at your team. STR=3, END=6. The creature automatically gains surprise on the first round. |
 |  ''Diona'' |A large bird of prey strikes out of the blue. STR=2, END=4. The diona automatically gains surprise on the first round of combat.    |
 |  ''Cantilid'' |Gregarious poisonous snakes attack your party; d6 creatures with STR=1 and END=1. However, due to the poison, hit points caused by them are doubled. |
 |  ''Spirit Force'' |The ghosts of local warriors killed treacherously by the Empire haunt the fields with a dark force. Rebel characters only get the stuff scared out of them (no effect).  The force attacks Imperials though, and involves them in its dark energy.  Every combat round each Imperial team member suffers a hit until they manage to disengage. All the characters are considered active, row 0 of the Disengagement table is used, and Prepared disengagement is not allowed. |
 |  ''Kettarian Parasite'' |A strange hydra-like monster with many tentacles on top of a cylindrical body. Its STR is 3 and its END 6.  Any organic character who suffers a hit from this monster is injected with a parasitic embryo. During the rest of this game turn, the character will have one hit that cannot be removed by resting or other healing methods. In the next game turn, it will have two such hits. On the following turn, three such hits, and so on until the character dies and many little Kettarian monsters erupt from its bloated body.  The treatment against this parasite only exists on Earth 111. The character must spend an entire Missions phase there resting to be cured. A Rebel character would have to be undetected (or else the hospital's staff would turn it over to Imperial Security). |
 |  ''Ragnaroid'' |A huge ape that superficially resembles an oversized Ragnari. Members of the latter race don't find the comparison amusing, though. STR=5, END=10. Wounds make it furious and it does not have its STR reduced when wounded. |

        !''DWTE Questions and Answers ''  //Comments and questions about DWTE are welcome at // __ avsari@myway.com __    //and will be answered as soon as possible.//   Q: Can you deliver the Pantaleon Papers to Pantaleon IX himself?   A: Yes, with the usual effect (blackmail perhaps?). 

Q: About Action random event 26-27, Special Forces team. Do you still get to not advance the Team Active marker even if there was nothing on the planet for the SF team to blow up?

A: Yes, but only if the planet is enemy-controlled (they can blow up a police station or something). If the planet is friendly-controlled and with no enemy targets, no effect.

Q: What if a mangled character spaceship piloted by a character with NAV 1 lands?

A: Crash is automatic.

Q: How do stun hits affect robot companions?

A:

Just as they affect organic characters (although a robot more properly could be said to be overloaded than stunned).  

Q: If an Imperial team on a still autonomous Avsar II (i.e. not in rebellion, therefore belonging to no Imperial district) is called in to report (Preliminary RE 11-20), where does it have to go?

A: To Earth 111 (perhaps His Majesty wants the latest news about what those wayward Avsari are up to...)

Q: What if the Emperor, alone on a planet but with the //Imperial Will// above him in orbit, gets recalled for duty?

A: He must use the //Will// during the upcoming Starship Movement segment to go to Earth. Once there, his time of unavailability is determined. Meanwhile, he cannot engage in other activities or missions except resting, as he is preoccupied with whatever is the matter.

The same general principle applies to other sovereigns in analogous situations.

Q: Does ingesting the Grimorean potion use up an extrinsic activity step?

A: No. The potion can be taken at any moment except in the middle of a melee, and it consumes no time or steps. The same is true of the bioenhancer. 

Q: Suppose my character is carrying a Sonic Disruptor, which grants enemies a +1 to STR, and he gets involved in a HtH melee. The Disruptor cannot be used in HtH melee; does it grant the enemies +1 STR nonetheless?

A: No. Weapons with negative effects handicap a character only if actually being used. The exception is the Body Armor, since it is assumed that it is worn at all times and causes conspicuousness. 

Q: Exactly what items does the Magnetic Pulsor cause to malfunction?

A: Plasma swords, all ranged-type weapons including inherent laser pistols (causing a -2 to basic STR and an inability to fire ranged), Neuronic Whip, Personal Shield, Dampening Field and EMP generators, Holoprojector, Long Range Scanner, Medical Tricorder, Hunter-Seeker, Mind Probe, Portable Antimatter Bomb, Spy Bot and all robots. Notice that the MaC Onioc will malfunction if hit by this weapon!

Q: Can you use counterespionage to protect different undiscovered levels of a secret? For example, suppose the Imperial has not discovered the planet nor the district of Pirate's Cove; can the Rebel apply counterespionage to the district fact, and anticipating the eventual discovery of this, separately to the planet fact?

A: Yes.

Q: In a battle, may units be moved from the front line to the screened line and vice versa between combat rounds?

A: Yes.

Q: What if a team guarding prisoners is attacked by a monster?

A: As in any other melee, to keep the prisoners you have to assign a guard for them in the screened line, and you need to defeat the monster. A number of situations may arise here:

- If the team disengages, it frees the prisoners, but these are left on the field with the monster! They will have to fight or disengage on their own. Remember that they are unarmed (-2 STR and no ranged fire ability).

- If the team decides that it has to fight the monster with all its strength and does not guard the prisoners, these are freed, and still in the melee. They can fight either the monster or the enemy characters, and/or may attempt to disengage. The monster(s) will attack both sides without distinction (by random selection). 

- Players are allowed to make deals. ("OK I'll set your prisoner free, but first he has to help me defeat this monster, and meanwhile we will not shoot at each other"). 

Q: Can Nana Summer be assigned to watch over prisoners in the screened line during a melee? 

A: Sure. "Now you sit down nice and quiet, young man, or I'll hit you with my umbrella!"

Q: If a character rests while the others of its team perform a successful Hide mission, does the resting character become undetected? What about a character on that same mission who is jailed? Or one that dropped off the mission?

A: As long as someone in the team successfully completes the mission, yes to all. However, inactive characters such as those described above must be included in the "number of characters involved" modifier in order to benefit.

Q: What if a "sovereign called back" (Preliminary RE 76-100) is rolled by a team and a sovereign is present on the planet, but with another team that is already "done"?

A: The sovereign can and must be taken to its planet by the active team, even if it already had performed a mission in this phase. The sovereign would have no effect on the current mission, though; it acts only as a passive passenger.

Notice that transporting a recalled sovereign has the highest priority; it cannot be refused or delayed. The assigned team must not engage in field or extrinsic activities (except those required to comply, such as repairing the spaceship). It must move directly towards the sovereign's planet, if possible in one jump (although a long trip can be divided into smaller "chunks" to accommodate the pilot's NAV rating).

Q: If a spaceship cannot carry all the members of a team at once, can it carry some to a new planet, then come back for the rest and carry them too to the new planet?

A: Yes. The number of steps lost ferrying back and forth will probably lower the FASC considerably, but it is allowed.

Q: Can a team have two spaceships and move around in them?

A: Yes. However, the spaceships must move at the same time to the same place (to rendezvous, if they started the phase separated), and both parts of the team must be present for a field activity step to be performed. If one spaceship gets lost or off course, or is using more than one jump to arrive to its destination, the members of the other may use the missed step(s) for extrinsic activity such as repairs while they wait for the other part of the team to arrive.

Q: Can Rebel camps generate random patrols (RE 06-10)?

A: No, only military units and controlled planets. Guerrillas operate clandestinely; it's not like they will be found patrolling the streets!

Q: The "Stellar Olympics" Stellar Event prevents rebellions. Can planets still progress to Concordance ownership in the Concordance Allegiance phase? What if this provokes rebellion on other planets?

A: Planets can (must, in fact) progress to Concordance Allegiance if eligible. However, during the Olympics no rebellions can occur. SWE's would have to be applied only to planets that will not go into rebellion as a result of them, or not at all.

Q: When do prisoners rest to heal wounds?

A: During their captor's Missions phase. Notice that a Rebel character could be active in the Rebel Missions phase, be wounded, then captured, and it could be healed by resting in the immediately following Imperial Missions phase, all in the same turn. Also, prisoners can be healed by doctors, medical droids, items, random events, etc. The decision to heal a prisoner is up to its captor, and the prisoner cannot refuse it. Notice that during a PrI with torture, you could use Action steps to heal the prisoner if it becomes too dangerously wounded. This makes Dr. Sote especially valuable for this mission.

Q: What happens if a minor character is stunned, and its side disengages from the battle?

A: It is eliminated.

Q: If a Preliminary random event gives you a character that can be a better mission leader than the one you had assigned in the Teams Organization segment, can you switch them and assign leadership to the new arrival?

A: Yes. Also notice that if something bad happens to a mission leader (it drops off, dies, etc.) another character of the team would have to step in and assume the position. 

Q: What does it mean that Dr. Weber can ignore //discovered // monsters?

A: He cannot use his knowledge to ignore monsters that have not been revealed previously. If you fear that a planet may contain an especially disgusting monster, you could use Weber in a GeR mission first to discover it. Thereafter his team may ignore the nasty every time that it comes up during a mission.

Q: How is surprise handled for battles with monsters that "attach" themselves (such as Electroreeba, Spirit Force, Maneating Plant and Flying Leech)?

A: The monster is never surprised; the team must roll for surprise normally.  The effects are as usual, -1 STR and no disengagement while the surprise lasts.

Q: If a Rebel "sovereign's own" unit appears on a planet due to its sovereign committing, can they perform Rebellion Combat by themselves, even if a rebellion did not occur on the planet in the same turn?

A: No. The Imperium is well aware of all the "sovereign's own" units (being the ceremonial and official escorts of the diverse rulers) and keeps a close surveillance over them; no doubt contingency plans exist in case of their isolated defection. Rebellion Combat represents a general uprising of the planet's population which practically "engulfs" the garrison, and therefore is NA for the case in question.

Q: If a commander accompanies a patrol that will fight an enemy team, must it and the soldiers still be treated as SO, i.e. with random target assignment, no retreat possible, etc.?

A: The soldiers are still treated as SO, but the MaC can be used as the player sees fit; it could choose its target, be placed in the screened line, try to disengage, etc. Notice however that the commander's choice of target will indirectly affect the soldiers, in the sense that they must still comply with the second paragraph of 4.1.g.

Q: Can a team be assigned a FrM mission even if it does not plan to move or do anything (just to have the chance of getting some goodies in the Preliminary random event)?

A: No. A team must perform at least one move (i.e. actually go to another planet) or one //real// extrinsic activity (you can't "repair" something that isn't broken, for example). Furthermore, you can't split a team for the sole purpose of performing parallel FrM missions (with the sleazy hope of getting more Preliminary random prizes). A parallel FrM would be that in which the characters begin together, split into two or more teams, go to (or remain in) the same place, and end together. Surely a devious player can conceive of other ways of getting around this ruling; players should respect the spirit of it and refrain.

Q: A "lost" ship //must// move, but suppose it is damaged and when it tries to warp it rolls a 5 or 6. What then?

A: It remains lost, but must try again next turn. One can imagine the anguish of that crew, lost in the middle of nowhere with a broken ship... supplies are getting low... the captain seems to be losing his sanity... an ensign has been mysteriously murdered... You get the picture.

Q: When there are two or more Rebel camps on a planet and they search for Imperials, does each camp roll separately or are their search values added for a single search?

A: The latter.

Q: Can a character lost in the vortex (Hyperjump random event 01) be resurrected by a Stellar event?

A: Yes. Mysteriously he/she has returned from the void (perhaps a very alien race from the other side of the galaxy teleported the character back...)

Q: On an atmospheric planet, Linori Lindi's AGI increases to seven! What would be her avoidance factor?

A: Four!

Q: What happens if Nana Summer is placed alone in the front line, against Rebels or civilians?

A: They still do not attack her, but breakthrough is automatic.

Q: What happens if you place Grunk alone in the front line against bounty hunters?

A: Aha! You have noticed that Grunk effectively makes his team immune to bounty hunters and others that would use lasers on stun.

Q: How can two teams travel in the same spaceship, as mentioned in 3.5.a and elsewhere?

A: It is somewhat complicated, and best if avoided. First, it should be obvious that both teams will be performing their missions on the same planet, since they are traveling together (unless one team is dropped off on some planet and the other continues to move elsewhere).

The team that owns the spaceship must perform its mission first, or otherwise it would not be able to carry the other team. The second team travels passively with the first when it moves. 

When the second team gets to carry out its mission, the Action steps that were spent by the first team in movement or extrinsic activity prior to landing on the mission goal planet would also be penalized on the second team. For instance, if the first team used two steps in movement, the second would also be considered to have spent its first and second Action steps in movement. 

A ramification of this, notice that teams traveling together are temporarily stacked. Therefore, doctors, medical droids, etc. would be able to heal the members of both teams at the same time.

Clarification: The Generic Monster 1-1 doubles as the wounded side for the Generic Monster 2-2.

Q: Where does a character have to go when it receives a personal quest (Preliminary RE 75) and it has more than one home planet?

A: RaS among the character's home planets to see which one is calling.

Q: Can a team deviate from its most direct route to the mission goal to leave a character somewhere (to drop a general on a stack of military units for instance)?

A: Yes. The rules given for character movement should be seen as guidelines, not constraints. Essentially, if you need to do something (like taking that general to his troops, or delivering an item to another team that has more need of it) go ahead, even if it is not a directive emanated from a random event or written rule. Common sense should prevail. The steps you lose in the errand should be penalty enough.  

Q: If both sides in a surface combat simultaneously eliminate each other, does a commander of either of them have to roll for his/her fate on the Vanquished Commander Table?

A: No. There's nobody left on the other side to give it any troubles! 

Q: What is the function of the "Event" markers (A, B, C, D)?

A: To serve as reminders on the Game-Turn track. For instance, you can place "Event A" on turn 15, and write down: "A: Imperial starfighter advantage ends."

Q: When a Stellar event grants you unrest shifts on a number of planets, can these be chosen by the player or are they randomly selected like SWE receptors?

A: Randomly, unless otherwise specified (i.e., if it says "the player can choose " or "of the player's choice").

!__''INDEX''__

''ABDUCTION''</span>, 44</span>
action teams, 40
agreements</span>, 9</span>
Alert</span>, 76</span>
anomaly</span>, 13</span>
Aquarians</span>, 87</span>
''ASSASSINATION''</span>,44</span>
attacker</span>, 15</span>
avoidance factor</span>, 17</span>
Avsari</span>, 18</span>
<span lang="es-MX">Avsari Legion</span>, 34</span>
battalion</span>, 35</span>
blockade</span>, 27, 55, 73</span>
Boroins</span>, 89</span>
breakthrough</span>, 16</span>
bribe</span>, 56</span>
builds</span>, 57</span>
Capitals</span>, 59</span>
capture</span>, 18, 25</span>
captured
<span lang="es-ES-u-co-trad">starships</span>.</span><span lang="es-ES-u-co-trad">//See: Starships, captured//</span>
card</span>, 9, 17</span>
cashier</span>, 56</span>
chain reaction</span>, 60</span>
Chapines</span>, 88</span>
character spaceship</span>, 24</span>
shopping for</span>, 56</span>
Civil War</span>, 54</span>
civilian</span>, 18, 43</span>
combat
categories</span>, 15</span>
procedure</span>, 15</span>
space</span>, 28</span>
surface</span>, 35</span>
values</span>, 15</span>
combat rounds</span>, 16</span>
commander
vanquished, 35
companions</span>, 17</span>
computer</span>, 24</span>
Concordance</span>, 54</span>
conscripts</span>, 34</span>
<span lang="es-ES-u-co-trad">coordination</span>,29</span>
counterespionage</span>, 70</span>
countermix</span>, 56</span>
''COUP D'ETAT''</span>,45</span>
crash landing</span>, 25</span>
crippled</span>, 30</span>
Cyborgs</span>, 88</span>
damage
character</span>, 18</span>
character spaceship</span>, 25</span>
ground unit</span>, 35</span>
starship</span>, 28, 30</span>
defender</span>, 15</span>
detection</span>, 39</span>
<span lang="es-MX">dice</span>, 9</span>
disengagement</span>, 15</span>
character combat</span>, 18</span>
<span lang="es-ES-u-co-trad">dogfight</span>, 25</span>
<span lang="es-ES-u-co-trad">starship</span>, 28</span>
surface combat, 35
district</span>, 7</span>
<span lang="es-ES-u-co-trad">dogfight</span>, 25</span>
Draks</span>, 87</span>
emergency escape</span>, 25</span>
Emperor</span>, 21</span>
Endobells</span>, 87</span>
''ESCAPE''</span>, 45</span>
<span lang="es-ES-u-co-trad">escape pods</span>.</span>//See survival//</span>
''ESPIONAGE''</span>, 46</span>
executions
<span lang="es-ES-u-co-trad">not allowed</span>,20</span>
extrinsic activity</span>, 41</span>
field activities</span>, 41</span>
''FREE MOVEMENT''</span>,46</span>
game map</span>, 7</span>
''GENERAL RESEARCH''</span>,46</span>
global defense networks GDN</span>,37</span>
<span lang="es-MX">government types</span>, 89</span>
Great Invasion</span>, 76</span>
ground unit</span>, 34</span>
environmental type</span>, 34</span>
size</span>, 34</span>
guerrillas</span>, 18, 44</span>
''HIDE''</span>, 46</span>
hits</span>, 15</span>
home planet</span>, 42</span>
Humans</span>, 87</span>
hyperjump
<span lang="es-MX">commanders and</span>, 12</span>
emergency</span>, 12, 25, 28</span>
joint</span>, 12</span>
hyperjumping</span>, 12</span>
Igneans</span>, 88</span>
Imperial Guard</span>, 22</span>
Imperial strategic restrictions, 75
//Imperial Will//</span>,22</span>
''INCITE DEFECTION''</span>,47</span>
''INFLUENCE SOVEREIGN''</span>,47</span>
initiative</span>, 81</span>
interception</span>, 28</span>
irate locals</span>, 43</span>
irregular</span>, 35</span>
items</span>, 51</span>
jail</span>, 19</span>
king of the hill</span>, 30</span>
NA to ground combat, 35
Lakandi</span>, 88</span>
<span lang="es-ES-u-co-trad">landed starships</span>.</span>//See: Starships, landed//</span>
lasers on stun</span>. </span>//See:capture//</span>
leaders
space combat</span>, 29</span>
surface combat</span>, 35</span>
lost</span>, 12</span>
main characters</span>, 17</span>
mangled spaceship</span>. </span>//See:Damage, character spaceship; damage, starship.//</span>
<span lang="es-ES-u-co-trad">massive shields</span>,29</span>
melee</span>, 18</span>
militia</span>, 35</span>
minor factions</span>, 61, 69</span>
mission leader</span>, 40</span>
missions</span>, 40</span>
aborting, 41
<span lang="es-MX">continuing</span>, 42</span>
<span lang="es-MX">dropping off</span>, 42</span>
extreme results, 42
level of success, 41
<span lang="es-MX">para-character</span>, 42</span>
resolution, 40
Moloch</span>, 78</span>
monster</span>, 43, 99</span>
Motherworld</span>, 60</span>
movement
<span lang="es-MX">character</span>, 14, 40</span>
general</span>, 12</span>
ground units</span>, 14</span>
<span lang="es-MX">starship</span>, 13</span>
mulligan</span>, 43</span>
nobility</span>, 17, 42</span>
occupation</span>, 55</span>
off-course</span>, 12, 14</span>
ownership
spaceship</span>, 24</span>
Pacification number</span>, 54</span>
Pacified</span>, 54</span>
<span lang="es-MX">para-character missions</span>.</span>//See: Missions, para-character//</span>
<span lang="es-MX">passengers</span>, 24</span>
<span lang="es-MX">on starships</span>, 14</span>
__percentile dice roll__</span>,9</span>
''PERSUADE FACTION''</span>,47</span>
pilot</span>, 24</span>
<span lang="es-ES-u-co-trad">inexperienced</span>,24</span>
planet control</span>, 54</span>
Planets</span>, 8</span>
''PLANT REBEL CELL''</span>,47</span>
plasma sword</span>, 18</span>
premature commitment, 41
''PRISONER INTERROGATION''</span>,47, 70</span>
prisoners</span>, 19</span>
''PROPAGANDA AND DIPLOMACY''</span>,48</span>
quash
rebellion</span>. </span>//See:Rebellion, quashed//</span>
quest</span>, 52</span>
Ragnari</span>, 87</span>
''RAISE MONEY''</span>, 48</span>
raking attack
<span lang="es-MX">GDN</span>, 37</span>
<span lang="es-ES-u-co-trad">starship</span>, 24</span>
random events</span>, 43</span>
<span lang="es-MX">random selection</span>, 6</span>
<span lang="es-MX">Rebel cell/camp</span>, 43</span>
Rebel secret bases, 69, 73
rebellion</span>, 53</span>
quashed</span>, 54</span>
<span lang="es-ES-u-co-trad">repair</span>, 25,58</span>
<span lang="es-ES-u-co-trad">character spaceship</span>,25</span>
ground unit, 36
items</span>, 51</span>
starship</span>, 30</span>
''RESCUE''</span>, 48</span>
resource point</span>, 56</span>
resting</span>, 18</span>
retinue</span>, 21</span>
''SABOTAGE''</span>, 48</span>
search</span>, 39</span>
search and destroy team</span>,39</span>
secret facilities</span>, 68</span>
secrets</span>, 68</span>
<span lang="es-ES-u-co-trad">self=destruction</span>,15</span>
Shields of the Empire</span>.</span>//See: Suicide bombers//</span>
Shockwave effect</span>, 59</span>
shuttle</span>, 14</span>
Solarians</span>, 87</span>
soldiers</span>, 18</span>
solitaire play</span>, 9</span>
sovereigns</span>, 20</span>
space routes</span>, 12</span>
spaceship
civilian</td>

; Summary
: We need to eat more like we are diabetic for the purpose of reducing refineds suagrs in our diet.
Edward Rutledge III 

Strength:4 Intellect: 5 Agility: 3 Charisma:1 (3) Endurance: 2(4) Social Level: 6 Skills: Fisticuffs 3, Throwing 2, Stealth 2, Marksmanship 4 (Rifle), Wilderness Travel 3 (Mapping), Observation 5, Engineering 6 (Naval Architecture), Science 5 (Physics), Eloquence 2, Lin-guistics 3 (German, French, Parhooni), Riding 4 (Horse), Piloting 4 (Sailing) 3 (Aerial Flyer)

Edward Rutledge III was born in Norfolk Virginia USA in September 1852.
His father owned the Rutledge Ship Yards in Norfolk and a number of cotton and tobacco plantations in South Carolina. Growing up in the post-civil war American south he experienced the hard times of the late 1860’s. His fam-ily managed to keep the shipyard going, but at the cost of the tobacco plan-tation. The cotton plantation continues to produce a comfortable income to supplement the income from the ship yard.
Young Edward graduated from the Virginia Military Institute with the class of 1871 with a degree in naval architecture. He went to work in the family ship yard as a designer of sailing yachts, and in 1880 he became the manager of the yard. He managed the yard until 1887 when he grew bored with the success that he was having. Seeking adventure and a chance to make his own fortune he left for Mars, leaving his younger brother Thomas in charge of his affairs. His father sent H.V. Smith, a machinist and all-around tough guy, with Edward as a companion. Arriving on Mars he set about to make his name in aerial flyer design. This was a new field for him, but he took to it with vigor. He applied his skill in designing streamlined racing yachts to the design of aerial flyers. In 1889 he began construction on the prototype for the Mk I flyer. Three months later he opened the Rutledge Boat Works of Syrtis Major and tried to interest the British government in his flyer designs. Rejected by the authorities, Rutledge decided he would have to prove his design in service before he would obtain any orders.
After finishing a few test runs of his Mk 1 flyer prototype (see the Microhulls article in this issue for details), Rutledge made it known that he was interested in participating in an expedition to prove his vessel. He was contacted almost immediately by Lionel Tyler, the well-known American in-dustrialist and explorer (See TRMGS #2). A brief venture into the Aerian hills proved that the Rutledge Flyer was all that an adventuring party could want, and after a successful escape from a group of High Martians, Tyler decided to hire Rutledge and his Flyer for a more extended excursion.
Although begun with high hopes, the second adventure with Tyler turned into a disaster. According to Rutledge, it was Tyler who got the party in trouble in the first place. Rutledge was captured along with other members of the party. In an escape attempt he was gravely injured and left for dead.
His companions reported him as having his brains stirred by savage Hill Martian cultists. Actually he was still alive but had several gashes to the forehead and scalp that caused much bleeding. The Americans who eventu-ally rescued the rest of the party later found Rutledge among the dead Mar-tians and restored his health at the US Embassy at Syrtis Major.
After recovering from his wounds Rutledge found that he was blind in his left eye and the left side of his face was horribly scared. To this day he wears a patch to cover the left side of his face. Although his flyers are very popular he does not like to go out in public and leaves most of the dealings at the boat works to Smith. Rutledge also carries a deep hatred for Tyler, who he blames for the failure of the adventure that left him half blind. A recluse, he spends most of his days designing new flyers and testing them, dreaming of the day he can revenge himself on Tyler. Thus far, Tyler’s wealth and connections to the British government have protected him, but Rutledge is patient. Characters who are able to obtain information that would dam-age Tyler’s reputation would be well rewarded by Rutledge.
Rutledge sometimes tests flyers on short adventures for which he will recruit additional party members. If he does go on an adventure do not think that he is just an engineer. Rutledge spent his youth on the cotton plantation hunting and fishing. Preferring a long gun to a handgun, Rutledge’s weapon of choice is a lever action Winchester rifle. It is unlikely that he will receive visitors unless he is recruiting for an expedition. In business matters related to his company, he will only conduct written negotiations for the flyers and only for the custom features. He never discounts the price on the flyer and accepts only full cash payment on delivery for a flyer. Ad-venturers attempting to purchase a Rutledge flyer will encounter H.V. Smith. Mr. Smith will always refer to Rutledge’s policy of no dis-counts.
[img[Eldar Aconite Class Frigate.image]]
;Sector
:Gothic Sector

!Fleet Commander

;0-1 Pirate Prince

You may include 1 Pirate Prince in your fleet, who must be assigned to a ship and adds +2 to its Leadership, to a maximum of 10. If the fleet is worth over 750 points a Pirate Prince must be included to lead it.

|Pirate Prince (Ld+2) | 100 pts |

You may purchase Fleet Commander re-rolls for your Pirate Prince by paying the cost listed below.

|One re-roll | 25 pts |
|Two re-rolls | 50 pts |
|Three re-rolls | 100 pts |

!Capital Ships

;0-12 Cruisers

|[[Eldar Eclipse Class Cruiser]]| 250 pts |
|[[Eldar Shadow Class Cruiser]]| 210 pts |

!Escorts

Your fleet may have any number of Escorts.

|[[Eldar Hellebore Class Frigate]] | 75pts |
|[[Eldar Aconite Class Frigate]] | 65pts |
|[[Eldar Hemlock Class Destroyer]] | 40pts |
|[[Eldar Nightshade Class Destroyer]] | 40pts |

!Ordnance

Any ship with launch bays may choose to have them launch any mix of Darkstar fighters and Eagle bombers. Ships with torpedo tubes are armed with Eldar torpedoes.
[img[Eldar Dragonship.image]]
Dragonship is the collective name given to the larger classes of Eldar vessel. The term Dragonship does not refer to any particular armament or configuration, but rather to a variety of vessels adhering to the same basic principles, designed for the same basic roles. Within this larger grouping, individual configurations or combinations of weapons give individual classes their proper name - always a variation on the phrase ‘Dragon’, representing different aspects of the creature of the same name from Eldar myth. Those Dragonships which are piloted in large part, or even exclusively, by spirit stones, for example, are referred to as Ghostdragons, while larger vessels which have been designed to operate away from the craftworld for great lengths of time are often referred to as Void Dragons. Different styles of Dragonship can vary greatly, with different numbers of sails, different armaments and even variations in size.
[img[Eldar Eclipse Class Cruiser.image]]

Ghostships are those vessels which, through the long slow dying-years of the Eldar race, have reached the point of near-abandonment through loss of crew. Into these vessels the Seers of lyanden incorporate spirit stones - sacred reliquaries bearing the souls of those Eldar already lost in the struggle for survival. Sometimes Ghostships will be entirely without living crew, perhaps even embued with the spirit stones of their original pilots, gunners and navigators, continuing toguide their race through the stars even beyond death. Sometimes the Ghostships will bear spirit stones ofmuch older Eldar, some perhaps even with memories of the Fall, unceremoniously denied peace by thedesperatehardship their people stillface.For the living crew of Ghostships, the presence of these ineffable ancestor-souls creates an equally daunting and empowering burden of expectation.

These spirit stones bring sentience to the living, but otherwise unthinking, wraithbone from which all Eldar vessels are constructed - a curious amalgam of the living, theinaminateand the undying.The spirit stones allow the Ghostships to function with an impossibly tiny number of crew and, when combined with the living wraithbone of their vessels, make Ghostships exceptionally resilient. Their formless thoughts are far harder to destroy than the frail bodies of living pilots, able to simply flit from one transient vein to another. They are at complete freedom within these wraithbone skeletons, diverting both reliance andfunction toalmost any locationon the ship shouldany given system become damaged. But the reliance which the Eldar of Iyanden have tocome toplace uponGhostships is not without difficulty. Spirit stones are already ancient and possess the temper of souls that should already be at rest, seemingly winsome and vacant, distant and unresponsive if left to simply wander the infinity circuits away from the will of the living Eldar Seers who bind and direct them in unlife.

In order to function, a Ghostship must always be commandedby aSpiritseer - a powerful Eldar psyker who has chosen to dedicate his powers to communing with the dead. Spiritseers are some of the most lonely and sinister members of a craftworld, required, as they frequently are, to spend periods of time alone aboard Ghostships, surrounded by nothing more than the souls of the reluctant dead.

!USING GHOSTSHIPS

Ghostships do not represent a particular class of vessel, but rather they are those vessels which are substantially controlled by spirit stones, having only a small or even non-existent living crew. The use of Ghostships is strongly disliked by the Eldar, since it requires disturbing the spirits of the dead and forcing them to return once more to battle that they might aid their living kin. It is for this reason that the vessels are known as Ghostships, representing an undeniably powerful entity which straddles the boundary between life and death, yet equally represents a force that the Eldar would be wise to leave undisturbed in all but the most dire of circumstances. The Tyranid invasion and the ensuing decimation of the population make Ghostships an abhorrent necessity to the Eldar of Iyanden, however, and they are a far more common component of the Craftworld's fleets than the Eldar would wish.

Any vessel in an Iyanden fleet may be converted to a Ghostship. Ghostships use the following special rules:

;Leadership
: Ghostships have normal Eldar leadership.
;Special Orders
: Ghostships are able go onto special orders in just the same manner as other vessels, however there is always a danger that the spectral and deathly manner in which these vessels interact with the real universe will distract them and turn their attention away from the battle at hand. If a Ghostship fails a Command check for a special order, it not only fails to go onto the special order, but may also do nothing this turn. If the failed check is as a result of attempting to go onto Brace for Impact orders at another point during the turn, the Ghostship may do nothing during its next turn instead. When you fail a Command check for a Ghostship you may not make any further Command checks for other Ghostships during the same turn. You may, however, continue to give special orders to other ‘crewed' vessels in the fleet (until, of course, you fail a Command check with one of them as well).
;Deathless
: Ghostships require none of the more delicate systems required to support a living crew, and the ease with which the interred spirits move throughout the wraithbone arteries of the vessel means that even when badly damaged the vessel is still able to function effectively. By the normal fragile standards of the Eldar, Ghostships present a fairly sturdy proposition. Ghostships, unlike other Eldar vessels, only suffer a critical hit on a roll of a 6 (not a 4,5 or 6 as is usually the case with Eldar vessels).
;Uncrewed
: Since Ghostships are piloted by the spirits of long-dead Eldar warriors, their crews are either small or non-existent. For this reason:
* Ghostships may not contain Aspect Warrior fighting crews.
* Ghostships may not be armed with launch bays.
* Ghostships may not launch boarding actions, or hit-and-run attacks of any form.
* Enemy boarding a Ghostship gain a +1 modifier in the boarding action, in addition to other modifiers.
* Enemy making a hit-and-run attack against Ghostships add +1 to their dice roll.

Ghostships roll only half the normal number of dice when undertaking damage control in the End phase (before halving it again for Blast markers, if appropriate).
[img[Eldar Hellebore Class Frigate.image]]
The Hemlock is notable for its simplicity of design. It consists of a powerful pulsar lance, highly efficient drives, and little else. Admiral Grove once described the Hemlock as "more of a mobile gun than a proper starship”. With the power needed for the stellar drives and pulsar lance, even considering advanced Eldar engine technology, the Hemlock probably cannot generate a stable interior environment for much more than the crew members needed for steering the ship and firing the pulsar. This makes it especially vulnerable to boarding actions from enemy escorts - if they can get close enough to board.
[img[Eldar Nightshade Class Destroyer.image]]
[img[Eldar Shadow Class Cruiser.image]]
[img[Eldar Shadowhunter.image]]
[img[Eldar Void Stalker Class Battleship.image]]
|!Eldar Wraithship Class |<|<|!Armament |!Range<br>Speed|!Firepower<br>Strength|!Fire Arc|
|!Type |	Cruiser/6	|^[img height=200 [Eldar Wraithship.image]] |!Choose one prow weapon for each Wriathship in the fleet. |<|<|<|
|!Hits |	Cruiser/6	|~|!Prow Weapons Battery | 30cm | 8 | Front |
|!Speed |	10/20/25cm	|~|!Prow Pulsar Lance | 30cm | 2 | Front |
|!Turns |	special	|~|!Choose one keel weapon for each Wraithship in the fleet. |<|<|<|
|!Shields |	Holo-fields	|~|!Keel Torpedoes | 30cm | 4 | Front |
|!Armor |	5+	|~|!Keel Launch Bay | Nightwing Fighters: 30cm*<br>Phoenix Bombers: 20cm* | 2 | - |
|!Turrets |	0	|~|! |  |  |  |
*Nightwings function exactly as Darkstars, Phoenix bombers function exactly as Eclipse.



---

{{Eldar Wraithship Class.information}}
Wraithships are made from wraithbone, a material drawn as raw energy from the Warp and shaped into matter by psychic craftsmen known as Bonesingers. The Wwraithbone forms the living skeletal core of the spaceship around which its other structures are arranged. The wraithbone also provides channels for psychic energy This facilitates internal communication, transmits power and enables the spaceship to act as an organically integrated whole. The wraithbone core of a spaceship is surrounded by a structure which is literally grown into the required shape by Bonesingers. These Eldar use their psychomorphic talents to shape bulkheads, walls, floors and conduits into a shell that completely surrounds the wraithbone core and forms the hull and major internal divisions of the spaceship. Most of a spaceship’s operating systems are connected directly to the wraithbone core. The many thousands of systems draw power through the wraithbone and are constantly monitored and controlled through it. Because of the unique practices of Eldar psychic engineering, Eldar spaceships resonate with sympathetic psychic energy. The Wraithbone core provides a psychic channel through which an Eldar can control mechanical functions. In this way, Eldar attuned to the very essence of their spaceship guide it, making countless minute adjustments to the trim of the great solar sails to draw every fraction of energy from the solar winds. This is also the key to the legendary elegance and almost birdlike agility of the Eldar Wraithships. Their pilots literally feel the solar wind on the ship’s sails, they sense the flex of the ship’s structure, the tension and movement of its Wraithbone skeleton. Like a hawk soaring on a thermal or diving to clutch at its prey, a Wraithship can turn in the wind, circling and swooping to hunt its own prey - the spaceships of its enemy.
Wraithships are made from wraithbone, a material drawn as raw energy from the Warp and shaped into matter by psychic craftsmen known as Bonesingers. The Wwraithbone forms the living skeletal core of the spaceship around which its other structures are arranged. The wraithbone also provides channels for psychic energy This facilitates internal communication, transmits power and enables the spaceship to act as an organically integrated whole. The wraithbone core of a spaceship is surrounded by a structure which is literally grown into the required shape by Bonesingers. These Eldar use their psychomorphic talents to shape bulkheads, walls, floors and conduits into a shell that completely surrounds the wraithbone core and forms the hull and major internal divisions of the spaceship. Most of a spaceship’s operating systems are connected directly to the wraithbone core. The many thousands of systems draw power through the wraithbone and are constantly monitored and controlled through it. Because of the unique practices of Eldar psychic engineering, Eldar spaceships resonate with sympathetic psychic energy. The Wraithbone core provides a psychic channel through which an Eldar can control mechanical functions. In this way, Eldar attuned to the very essence of their spaceship guide it, making countless minute adjustments to the trim of the great solar sails to draw every fraction of energy from the solar winds. This is also the key to the legendary elegance and almost birdlike agility of the Eldar Wraithships. Their pilots literally feel the solar wind on the ship’s sails, they sense the flex of the ship’s structure, the tension and movement of its Wraithbone skeleton. Like a hawk soaring on a thermal or diving to clutch at its prey, a Wraithship can turn in the wind, circling and swooping to hunt its own prey - the spaceships of its enemy.
For any role-playing game, it is too easy for the player to drive their character to suffer through all sorts of difficulties without any difficulties.

[[Embrace the Suck]] is a universal rule intended to allow the GM to keep track of how often the player forces their character through difficult tasks and allows the GM to test the character's Constitution to then allow a negative penalty. This negative penalty is intended to represent the ongoing effect of stress on the character.

Examples of [[Embrace the Suck]] include:

* Poor Food
* Poor sleep

[img[image.Ethereum]]

; Source
: https://ethereum.org/en/

Ethereum is a global, open-source platform for decentralized applications.


On Ethereum, you can write code that controls digital value, runs exactly as programmed, and is accessible anywhere in the world.
;Freighter Fit
:Find a freighter fit for the Orca and see if it is something I can carry and change out with a Mobile Depot
:~~See if there is a fit for an Orca to mine while repping each other.~~
::Disregard, a Porpoise may be better instead.
:~~Investigate how to reduce align time for Orca.~~
::Use a MWD to cycle before warp

;Deep Space Transport
:Look into using a DST for Jita runs and then just bring all other alts to screen and scout when transporting.

;Jita Buy List
:Blueprint for Lockable Station Containers



;Requests to Darwien
:~~Access for Vulcan Wolfgang to use Corp blueprints at Fawlty Towers.~~
:Access for my alts to access a Station Container at certain locations.

;Manufacturing
:Find a program to spreadsheet all required components to make Orcas.


<div style="clear: both;">

;Information
:EVE-O Preview is a software program that allows you to see the small preview screens of multiple characters at the same time.
;Armor Reinforcement

:This certificate represents a level of competence in passive armor buffers. It is mainly used to maximize Effective Hitpoints (EHP) on highly competitive ship fittings. This is a good skillset for capsuleers looking to get the most armor buffer possible on their vessel.


;Armor Tanking

:This certificate represents a level of competence in active and passive armor-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Amarr or Gallente vessels or any kind of ship boasting plenty of low slots to spare.


;Capital Armor Tanking

:This certificate represents a level of competence in capital armor-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Amarr or Gallente capital ships.


;Capital Remote Armor Repairer

:This certificate represents a level of competence in remote capital armor support. The holder has learned that assistance rendered to other vessels involved in combat may make the vessel providing assistance a legal target. This is a good skillset for Amarr, Gallente, Minmatar Carriers and Supercarriers.


;Remote Armor Repairer

:This certificate represents a level of competence in remote armor support. The holder has learned that assistance rendered to other vessels involved in combat may make the vessel providing assistance a legal target. This is a good skillset for any kind of dedicated Support Frigate, Cruiser or Logistics vessel.
Armour Tanking Skill Set

;Armor Reinforcement
:This certificate represents a level of competence in passive armor buffers. It is mainly used to maximize Effective Hitpoints (EHP) on highly competitive ship fittings. This is a good skillset for capsuleers looking to get the most armor buffer possible on their vessel.

;Armor Tanking
:This certificate represents a level of competence in active and passive armor-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Amarr or Gallente vessels or any kind of ship boasting plenty of low slots to spare.

---

```
Repair Systems I
Armor Layering I
Repair Systems II
Armor Layering II
Repair Systems III
Armor Layering III
Mechanics IV
Repair Systems IV
Hull Upgrades IV
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Armor Layering IV
Mechanics V
Repair Systems V
Hull Upgrades V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Armor Layering V
```
This plan includes the following certificates:

;Resource Harvesting
:This certificate represents a level of competence in mining, ice harvesting and gas cloud harvesting. This is a good skillset for capsuleers specializing in ORE vessels.

;Core Spaceship Operation
:This certificate represents a level of competence in ship CPU, power grid and capacitor usage. This is a critical skillset for any capsuleer wishing to increase their tactical options in combat.


;Core Weapon Fitting
:This certificate represents a level of competence in weapons CPU and power grid usage. This is a critical skillset for any capsuleer wishing to increase their tactical options in combat.


;Industrial Drones
:This certificate represents a level of competence in the control of all industry-related drones, including mining and salvaging variations. The holder has learned that drones may be targeted and destroyed in combat. This is a good skillset for capsuleers dedicated to resource retrieval operations and fit well with ORE vessels.

;All Combat Drones
:This certificate represents a level of competence in the control of all combat-related drones, including light, medium, heavy and sentry variations. The holder has learned that drones may be targeted and destroyed in combat. This is a good skillset for any combat-oriented capsuleer as many ships from all factions augment their capabilities through the use of drones.


;Navigation
:This certificate represents a level of competence with ship propulsion and speed enhancing modules like Afterburners and Microwarpdrives. The holder has learned that those modules consume a fair amount of capacitor while active. This is a critical skillset for any kind of operation in hazardous space.

;Navigation Support
:This certificate represents a level of competence with ship propulsion. It is mainly used to minimize travel time on vessels without module slots. This is a good skillset for capsuleers looking to maximize general navigation performance.


;Social
:This certificate represents a level of competence in social connections and standings. This is a good skillset for capsuleers wishing to improve their relations with various factions and their agents.

---


```
Light Drone Operation I
Leadership I
Social I
Mining Drone Operation I
Fuel Conservation I
Negotiation I
Mining Upgrades I
Acceleration Control I
Drones II
Drone Avionics II
Industry II
Light Drone Operation II
Leadership II
Social II
Diplomacy I
Diplomacy II
Energy Grid Upgrades II
Electronic Warfare II
Evasive Maneuvering II
Mining Drone Operation II
Fuel Conservation II
Negotiation II
Mining Upgrades II
Acceleration Control II
High Speed Maneuvering II
Warp Drive Operation III
Trade III
Drones III
Drone Avionics III
Industry III
Light Drone Operation III
Leadership III
Social III
Mining Connections I
Distribution Connections I
Security Connections I
Connections I
Criminal Connections I
Mining Connections II
Distribution Connections II
Security Connections II
Connections II
Criminal Connections II
Diplomacy III
Weapon Upgrades III
Energy Grid Upgrades III
Electronic Warfare III
Evasive Maneuvering III
Mining Drone Operation III
Fuel Conservation III
Negotiation III
Mining Connections III
Distribution Connections III
Security Connections III
Connections III
Criminal Connections III
Mining Upgrades III
Acceleration Control III
Mining IV
Ice Harvesting I
Gas Cloud Harvesting I
Astrogeology I
Ice Harvesting II
Gas Cloud Harvesting II
Astrogeology II
Ice Harvesting III
Gas Cloud Harvesting III
Astrogeology III
Capacitor Systems Operation IV
Spaceship Command IV
Navigation IV
Afterburner IV
High Speed Maneuvering III
Warp Drive Operation IV
Drones IV
Drone Navigation I
Salvage Drone Operation I
Drone Durability I
Drone Navigation II
Salvage Drone Operation II
Drone Durability II
Drone Navigation III
Salvage Drone Operation III
Drone Durability III
Drone Avionics IV
Ice Harvesting IV
Gas Cloud Harvesting IV
Drone Navigation IV
Light Drone Operation IV
Social IV
Fast Talk I
Fast Talk II
Fast Talk III
Diplomacy IV
Electronics Upgrades IV
Weapon Upgrades IV
Advanced Weapon Upgrades I
Advanced Weapon Upgrades II
Advanced Weapon Upgrades III
Energy Grid Upgrades IV
Electronic Warfare IV
Evasive Maneuvering IV
Mining Drone Operation IV
Fuel Conservation IV
Negotiation IV
Mining Connections IV
Distribution Connections IV
Security Connections IV
Capacitor Management IV
Astrogeology IV
Connections IV
Criminal Connections IV
Mining Upgrades IV
Salvage Drone Operation IV
Acceleration Control IV
Fast Talk IV
Power Grid Management V
CPU Management V
High Speed Maneuvering IV
Drone Durability IV
Mining V
Capacitor Systems Operation V
Spaceship Command V
Navigation V
Afterburner V
Warp Drive Operation V
Drones V
Drone Sharpshooting I
Heavy Drone Operation I
Drone Interfacing I
Amarr Drone Specialization I
Minmatar Drone Specialization I
Gallente Drone Specialization I
Caldari Drone Specialization I
Advanced Drone Avionics I
Drone Sharpshooting II
Heavy Drone Operation II
Drone Interfacing II
Amarr Drone Specialization II
Minmatar Drone Specialization II
Gallente Drone Specialization II
Caldari Drone Specialization II
Advanced Drone Avionics II
Drone Sharpshooting III
Heavy Drone Operation III
Drone Interfacing III
Amarr Drone Specialization III
Minmatar Drone Specialization III
Gallente Drone Specialization III
Caldari Drone Specialization III
Advanced Drone Avionics III
Drone Sharpshooting IV
Heavy Drone Operation IV
Drone Interfacing IV
Sentry Drone Interfacing I
Sentry Drone Interfacing II
Sentry Drone Interfacing III
Amarr Drone Specialization IV
Minmatar Drone Specialization IV
Gallente Drone Specialization IV
Caldari Drone Specialization IV
Advanced Drone Avionics IV
Sentry Drone Interfacing IV
Drone Avionics V
Ice Harvesting V
Gas Cloud Harvesting V
Drone Navigation V
Drone Sharpshooting V
Light Drone Operation V
Social V
Diplomacy V
Advanced Weapon Upgrades IV
Electronics Upgrades V
Weapon Upgrades V
Energy Grid Upgrades V
Evasive Maneuvering V
Mining Drone Operation V
Fuel Conservation V
Negotiation V
Mining Connections V
Distribution Connections V
Security Connections V
Capacitor Management V
Astrogeology V
Deep Core Mining I
Deep Core Mining II
Deep Core Mining III
Deep Core Mining IV
Connections V
Criminal Connections V
Mining Upgrades V
Salvage Drone Operation V
Acceleration Control V
Fast Talk V
High Speed Maneuvering V
Heavy Drone Operation V
Drone Interfacing V
Amarr Drone Specialization V
Minmatar Drone Specialization V
Gallente Drone Specialization V
Caldari Drone Specialization V
Advanced Drone Avionics V
Sentry Drone Interfacing V
Drone Durability V
Deep Core Mining V
Advanced Weapon Upgrades V
```
;Battleship Navigation
:    This certificate represents level of competence which ship propulsion and speed enhancing modules like Afterburners, Microwarpdrives and Micro Jump Drives. The holder is aware that those modules consume a fair amount of capacitor while active. This is a critical skill set to have for any kind of operation in hazardous space.
;Capital Navigation
:    This certificate represents a level of competence with capital ships. The holder has learned that capital ships can use both stargates and their own jump drives to navigate, and that the latter causes them to accumulate jump fatigue. This is a critical skillset for any kind of capital ship movement.
;Capital Shield Tanking
:    This certificate represents a level of competence in capital shield-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Caldari and Minmatar capital ships.
;Capital Armor Tanking
:    This certificate represents a level of competence in capital armor-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Amarr or Gallente capital ships.

---

```
Repair Systems I
Shield Operation I
Fuel Conservation I
Acceleration Control I
Repair Systems II
Shield Operation II
Evasive Maneuvering II
Fuel Conservation II
Shield Management II
Tactical Shield Manipulation II
Acceleration Control II
High Speed Maneuvering II
Warp Drive Operation III
Repair Systems III
Shield Operation III
Evasive Maneuvering III
Fuel Conservation III
Shield Management III
Tactical Shield Manipulation III
Acceleration Control III
Spaceship Command IV
Navigation IV
Micro Jump Drive Operation I
Micro Jump Drive Operation II
Afterburner IV
Mechanics IV
High Speed Maneuvering III
Micro Jump Drive Operation III
Warp Drive Operation IV
Repair Systems IV
Shield Operation IV
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
Hull Upgrades IV
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
Resistance Phasing I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
Resistance Phasing II
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
Resistance Phasing III
Evasive Maneuvering IV
Fuel Conservation IV
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Management IV
Resistance Phasing IV
Tactical Shield Manipulation IV
Acceleration Control IV
Power Grid Management V
High Speed Maneuvering IV
Micro Jump Drive Operation IV
Spaceship Command V
Advanced Spaceship Command I
Advanced Spaceship Command II
Advanced Spaceship Command III
Advanced Spaceship Command IV
Navigation V
Afterburner V
Mechanics V
Warp Drive Operation V
Repair Systems V
Shield Operation V
Hull Upgrades V
Capital Repair Systems I
Capital Repair Systems II
Capital Repair Systems III
Capital Repair Systems IV
Evasive Maneuvering V
Fuel Conservation V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Management V
Capital Shield Operation I
Capital Shield Operation II
Capital Shield Operation III
Capital Shield Operation IV
Resistance Phasing V
Tactical Shield Manipulation V
Acceleration Control V
High Speed Maneuvering V
Micro Jump Drive Operation V
Advanced Spaceship Command V
Capital Ships I
Capital Ships II
Capital Ships III
Capital Ships IV
Capital Repair Systems V
Capital Shield Operation V
Capital Ships V
```

;Corporation Management

:This certificate represents a level of competence in corporation holding. It is a good skill set for a CEO to increase the maximum number of corporation members and races.
;All Combat Drones

:This certificate represents a level of competence in the control of all combat-related drones, including light, medium, heavy and sentry variations. The holder has learned that drones may be targeted and destroyed in combat. This is a good skillset for any combat-oriented capsuleer as many ships from all factions augment their capabilities through the use of drones.


;Fighters

:This certificate represents a level of competence in the control of all fighters. This is a good skillset for capsuleers specializing in capital vessels of all factions based on the Carrier hulls.


;Heavy Fighters

:This certificate represents a level of competence in the control of all heavy fighters. The holder has learned that heavy fighters are advanced fighters that may be destroyed in combat and are specifically designed to attack capital ships. This is a good skillset for capsuleers specializing in capital vessels of all factions based on the Supercarrier hulls.


;Industrial Drones

:This certificate represents a level of competence in the control of all industry-related drones, including mining and salvaging variations. The holder has learned that drones may be targeted and destroyed in combat. This is a good skillset for capsuleers dedicated to resource retrieval operations and fit well with ORE vessels.


;Light Drones

:This certificate represents level of competence in the control of light combat drones. The holder has learned that drones may be targeted and destroyed in combat. This is a good skillset for any combat-oriented capsuleer as many ships from all factions augment their capabilities through the use of drones.


;Medium Drones

:This certificate represents level of competence in the control of light and medium combat drones. The holder has learned that drones may be targeted and destroyed in combat. This is a good skillset for any combat-oriented capsuleer as many ships from all factions augment their capabilities through the use of drones.


;Support Drones

:This certificate represents a level of competence in the control of all logistics drones, including armor and shield maintenance variations. The holder has learned that drones may be destroyed in combat and that maintenance drones cannot be used on their owner's own vessel. This is a good skillset for capsuleers specializing in Logistic ships.
;Cloaking

:This certificate represents a level of competence in the operation of cloaking devices. The holder has learned that cloaks cannot be activated within 2000m of most objects and spatial phenomena. This is a good skillset for capsuleers specializing in Exploration or Disruption vessels.


;Electronic Counter Measures

:This certificate represents a level of competence in the operation of Electronic Counter Measures (ECM) modules. The holder has learned ECM is a chance-based tool that, when successful, prevents the target from holding target locks. This is a good skillset for capsuleers specializing in small, medium or large Caldari Disruption vessels based on Frigate, Cruiser and Battleship hulls.


;Sensor Dampening

:This certificate represents a level of competence in the operation of Remote Sensor Dampener (RSD) modules. The holder has learned that RSDs reduce the target's locking speed and locking range, making it difficult for them to acquire a target lock. This is a good skillset for capsuleers specializing in small or medium Gallente Disruption vessels based on Frigate and Cruiser hulls.


;Sensor Linking

:This certificate represents a level of competence in the operation of Remote Sensor Booster (RSB) modules. The holder has learned that RSBs improve the target max targeting range and scan resolution. This is a good skillset for capsuleers specializing in Gallente or Minmatar Logistics vessels.


;Tackling

:This certificate represents a level of competence in the operation of propulsion jamming modules, Stasis Webifiers, Warp Scramblers and Warp Disruptors. The holder has learned that webbers decrease the target's speed, while scramblers and disruptors prevent them from warping. This is a critical skillset for any capsuleer wishing to dictate the terms of a fight.


;Tactical Logistics Reconfiguration

:This certificate represents a level of competence in handling Triage Modules. The holder has learned that Triage Modules may only be used on Carriers, improving their remote assisting capabilities at the expense of mobility. This is a critical skillset for capsuleers specializing in Carrier hulls.


;Target Painting

:This certificate represents a level of competence in the operation of Target Painter modules. The holder has learned that Target Painters increase the target's signature radius, allowing it to be locked onto faster and causing most weapons systems to inflict additional damage on it. This is a good skillset for capsuleers specializing in small or medium Minmatar Disruption vessels based on the Frigate and Cruiser hulls.


;Tracking Disruption

:This certificate represents a level of competence in the operation of Tracking Disruptor (TD) modules. The holder has learned that TDs decrease the Optimal Range, Falloff and Tracking on the target's turrets, making it harder for their turret weapons to hit. This is a good skillset for capsuleers specializing in small or medium Amarr Disruption vessels based on Frigate and Cruiser hulls.
;Capacitor Emission

:This certificate represents a level of competence in remote capacitor support. This is a good skillset for any kind of dedicated Support Frigate, Cruiser or Logistics vessel.


;Capital Capacitor Emission

:This certificate represents a level of competence in remote capital capacitor support. This is a good skillset for Amarr and Caldari Carriers and Supercarriers.


;Core Spaceship Operation

:This certificate represents a level of competence in ship CPU, power grid and capacitor usage. This is a critical skillset for any capsuleer wishing to increase their tactical options in combat.


;Core Weapon Fitting

:This certificate represents a level of competence in weapons CPU and power grid usage. This is a critical skillset for any capsuleer wishing to increase their tactical options in combat.
;Cloaking
:    This certificate represents a level of competence in the operation of cloaking devices. The holder has learned that cloaks cannot be activated within 2000m of most objects and spatial phenomena. This is a good skillset for capsuleers specializing in Exploration or Disruption vessels.

;Data and Relic Analyzers
:This certificate represents a level of competence in the operation of analyzer modules, like Data and Relic Analyzers. The holder has learned that those modules are used in various sites related to exploration. This is a good skillset for capsuleers specializing in Exploration vessels as a whole.

;Scanning
:    This certificate represents a level of competence in scanning. The holder has learned that scan probes are a specialized tool that may be used to find hidden content or to track down capsuleers inside a solar system. This is a good skillset for capsuleers specializing in Exploration vessels as a whole.

;Astero
:The Astero is the frigate of the Sisters of Eve faction, introduced in Rubicon 1.0. It has bonuses to drones and armor resists, the largest drone bay available in the frigate class, and the ability to fit a Covert Ops cloak.

:The Astero is primarily designed as a cloaky exploration ship, with a particular emphasis on extended operation away from stations. It is a prominent PvP frigate, and can kill other frigates with ease, which make it especially suitable for ganking other low/null/WH explorers. This PvP-focused nature is supplemented by the Covert Ops Cloak, which enable the Astero to pick its fights. As a result of this combination of exploration bonuses, covert ops cloak, and excellent PvP capabilities, the Astero is a popular ship in low, null, and WH space exploration.

:The Astero is the only T1 ship that can fit a Covert Ops cloak, meaning it could be an attractive cloaky scout for lower skilled players. However, besides being expensive for the job, the Astero has the major drawback that it does not have the CPU that other scanning frigates and covert ops ships have, meaning it must make many fitting trade-offs to fit an expanded probe launcher, which is normally a standard part of a cloaky scout's fit. 
---

;Skill Books
```
Shield Operation
Repair Systems
Light Drone Operation
Fuel Conservation
Magnetometric Sensor Compensation
Armor Layering
Acceleration Control
Cloaking
Drone Navigation
Drone Durability
EM Armor Compensation
Explosive Armor Compensation
Kinetic Armor Compensation
Thermal Armor Compensation
Astrometric Pinpointing
Drone Sharpshooting
Drone Interfacing
Amarr Drone Specialization
Minmatar Drone Specialization
Gallente Drone Specialization
Caldari Drone Specialization
Advanced Drone Avionics
```

---

```
Shield Operation I
Repair Systems I
Light Drone Operation I
Fuel Conservation I
Magnetometric Sensor Compensation I
Armor Layering I
Acceleration Control I
Drones II
Drone Avionics II
Shield Operation II
Repair Systems II
Light Drone Operation II
Cloaking I
Energy Grid Upgrades II
Evasive Maneuvering II
Electronic Warfare II
Fuel Conservation II
Magnetometric Sensor Compensation II
Archaeology II
Hacking II
Propulsion Jamming II
Shield Management II
Armor Layering II
Acceleration Control II
Astrometric Acquisition II
High Speed Maneuvering II
Warp Drive Operation III
Signature Analysis III
Drones III
Drone Avionics III
Shield Operation III
Repair Systems III
Light Drone Operation III
Cloaking II
Astrometric Rangefinding II
Long Range Targeting III
Energy Grid Upgrades III
Evasive Maneuvering III
Electronic Warfare III
Fuel Conservation III
Magnetometric Sensor Compensation III
Archaeology III
Hacking III
Propulsion Jamming III
Shield Management III
Armor Layering III
Acceleration Control III
Survey IV
Capacitor Systems Operation IV
Spaceship Command IV
Navigation IV
Afterburner IV
Mechanics IV
Target Management IV
Astrometric Acquisition III
High Speed Maneuvering III
Warp Drive Operation IV
Signature Analysis IV
Drones IV
Drone Navigation I
Drone Durability I
Drone Navigation II
Drone Durability II
Drone Navigation III
Drone Durability III
Drone Avionics IV
Shield Operation IV
Repair Systems IV
Drone Navigation IV
Light Drone Operation IV
Cloaking III
Astrometric Rangefinding III
Electronics Upgrades IV
Hull Upgrades IV
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
Long Range Targeting IV
Energy Grid Upgrades IV
Evasive Maneuvering IV
Electronic Warfare IV
Fuel Conservation IV
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Magnetometric Sensor Compensation IV
Astrometrics IV
Astrometric Pinpointing I
Astrometric Pinpointing II
Astrometric Pinpointing III
Capacitor Management IV
Archaeology IV
Hacking IV
Propulsion Jamming IV
Shield Management IV
Armor Layering IV
Acceleration Control IV
Power Grid Management V
CPU Management V
Astrometric Acquisition IV
High Speed Maneuvering IV
Astrometric Pinpointing IV
Drone Durability IV
Survey V
Capacitor Systems Operation V
Spaceship Command V
Navigation V
Afterburner V
Mechanics V
Target Management V
Warp Drive Operation V
Signature Analysis V
Drones V
Drone Sharpshooting I
Drone Interfacing I
Amarr Drone Specialization I
Minmatar Drone Specialization I
Gallente Drone Specialization I
Caldari Drone Specialization I
Advanced Drone Avionics I
Drone Sharpshooting II
Drone Interfacing II
Amarr Drone Specialization II
Minmatar Drone Specialization II
Gallente Drone Specialization II
Caldari Drone Specialization II
Advanced Drone Avionics II
Drone Sharpshooting III
Drone Interfacing III
Amarr Drone Specialization III
Minmatar Drone Specialization III
Gallente Drone Specialization III
Caldari Drone Specialization III
Advanced Drone Avionics III
Drone Sharpshooting IV
Drone Interfacing IV
Amarr Drone Specialization IV
Minmatar Drone Specialization IV
Gallente Drone Specialization IV
Caldari Drone Specialization IV
Advanced Drone Avionics IV
Drone Avionics V
Shield Operation V
Repair Systems V
Drone Navigation V
Drone Sharpshooting V
Light Drone Operation V
Cloaking IV
Astrometric Rangefinding IV
Electronics Upgrades V
Hull Upgrades V
Long Range Targeting V
Energy Grid Upgrades V
Evasive Maneuvering V
Fuel Conservation V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Magnetometric Sensor Compensation V
Astrometrics V
Capacitor Management V
Archaeology V
Hacking V
Propulsion Jamming V
Shield Management V
Armor Layering V
Acceleration Control V
Astrometric Acquisition V
High Speed Maneuvering V
Astrometric Pinpointing V
Drone Interfacing V
Amarr Drone Specialization V
Minmatar Drone Specialization V
Gallente Drone Specialization V
Caldari Drone Specialization V
Advanced Drone Avionics V
Drone Durability V
Cloaking V
Astrometric Rangefinding V
```
;Armored Warfare Links

:This certificate represents a level of competence in leadership fleet support through Armored Warfare Links. The holder has learned that Armored Warfare Links do not work inside a Starbase Forcefield. This is a good skillset for capsuleers specializing in Battlecruisers or Command Ships.


;Foreman Links

:This certificate represents a level of competence in mining operation leadership through Foreman Links. This is a good skillset for capsuleers specializing in Industrial Command Ships or Capital Industrial Command Ships.


;Information Warfare Links

:This certificate represents a level of competence in leadership fleet support through Information Warfare Links. The holder has learned that Information Warfare Links do not work inside a Starbase Forcefield. This is a good skillset for capsuleers specializing in Battlecruisers or Command Ships.


;Siege Warfare Links

:This certificate represents a level of competence in leadership fleet support through Siege Warfare Links. The holder has learned that Siege Warfare Links do not work inside a Starbase Forcefield. This is a good skillset for capsuleers specializing in Battlecruisers or Command Ships.


;Skirmish Warfare Links

:This certificate represents a level of competence in leadership fleet support through Skirmish Warfare Links. The holder has learned that Skirmish Warfare Links do not work inside a Starbase Forcefield. This is a good skillset for capsuleers specializing in Battlecruisers or Command Ships.
;Capital Energy Turret

:This certificate represents a level of competence in handling capital energy turrets. The holder has learned that pulse lasers are short-range weapons, beam lasers are long range, and that both use crystal ammunition which can be swapped with no reload time. This is a good skillset for capsuleers specializing in capital Amarr vessels based on Dreadnought and Titan hulls.


;Capital Hybrid Turret

:This certificate represents a level of competence in handling capital hybrid turrets. The holder has learned that blasters are extreme close range weapons, while railguns are their counterpart at very long range, and that both use hybrid charges as ammunition. This is a good skillset for capsuleers specializing in capital Gallente vessels based on Dreadnought and Titan hulls.


;Capital Projectile Turret

:This certificate represents a level of competence in handling capital projectile turrets. The holder has learned that autocannons are close range weapons, while artillery cannons are medium to long range turrets with good alpha damage. This is a good skillset for capsuleers specializing in capital Minmatar vessels based on Dreadnought and Titan hulls.


;Large Energy Turret

:This certificate represents a level of competence in handling large energy turrets. The holder has learned that pulse lasers are short-range weapons, beam lasers are long range, and that both use crystal ammunition which can be swapped with no reload time. This is a good skillset for capsuleers specializing in medium to large Amarr vessels based on the Battlecruiser and Battleship hulls.


;Large Hybrid Turret

:This certificate represents a level of competence in handling large hybrid turrets. The holder has learned that blasters are extreme close range weapons, while railguns are their counterpart at very long range, and that both use hybrid charges as ammunition. This is a good skillset for capsuleers specializing in medium to large Caldari or Gallente vessels based on the Battlecruiser and Battleship hulls.


;Large Projectile Turret

:This certificate represents a level of competence in handling large projectile turrets. The holder has learned that autocannons are close range weapons, while artillery cannons are medium to long range turrets with good alpha damage. This is a good skillset for capsuleers specializing in medium to large Minmatar vessels based on the Battlecruiser and Battleship hulls.


;Medium Energy Turret

:This certificate represents a level of competence in handling medium energy turrets. The holder has learned that pulse lasers are short range weapons, beam lasers are long range, and both use crystal ammunition which can be swapped with no reload time. This is a good skillset for capsuleers specializing in medium Amarr vessels based on Cruiser and Battlecruiser hulls.


;Medium Hybrid Turret

:This certificate represents a level of competence in handling medium hybrid turrets. The holder has learned that blasters are extremely close range weapons, while railguns are their counterpart at very long range, and that both use hybrid charges as ammunition. This is a good skillset for capsuleers specializing in medium Caldari or Gallente vessels based on Cruiser and Battlecruiser hulls.


;Medium Projectile Turret

:This certificate represents a level of competence in handling medium projectile turrets. The holder has learned that autocannons are close range weapons, while artillery cannons are medium to long range turrets with good alpha damage. This is a good skillset for capsuleers specializing in medium Minmatar vessels based on Cruiser and Battlecruiser hulls.


;Small Energy Turret

:This certificate represents a level of competence in handling small energy turrets. The holder has learned that pulse lasers are short range weapons, beam lasers are long range, and both use crystal ammunition which can be swapped with no reload time. This is a good skillset for capsuleers specializing in small Amarr vessels based on Frigate and Destroyer hulls.


;Small Hybrid Turret

:This certificate represents a level of competence in handling small hybrid turrets. The holder has learned that blasters are extremely close range weapons, while railguns are their counterpart at very long range, and that both use hybrid charges as ammunition. This is a good skillset for capsuleers specializing in small Caldari or Gallente vessels based on Frigate and Destroyer hulls.


;Small Projectile Turret

:This certificate represents a level of competence in handling small projectile turrets. The holder has learned that autocannons are close range weapons, while artillery cannons are medium to long range turrets with good alpha damage. This is a good skillset for capsuleers specializing in small Minmatar vessels based on Frigate and Destroyer hulls.


;Tactical Weapon Reconfiguration

:This certificate represents a level of competence in handling Siege Modules. The holder has learned that Siege Modules may only be used on Dreadnoughts, improving their offensive and defensive capabilities at the expense of mobility. This is a critical skillset for capsuleers specializing in Dreadnought hulls.

;Material Efficiency Research
:    This certificate represents a level of competence in handling material efficiency research. This is a good skillset for players wishing to research their Tech I blueprint originals.
;Research Operations
:    This certificate represents a level of competence in handling remote access and simultaneous use of Material Efficiency, Time Efficiency Research, copying and invention activities. This is a good skillset for players engaged in any kind of science operation.
;Time Efficiency Research
:    This certificate represents a level of competence in handling time efficiency research. This is a good skillset for players wishing to research their Tech I blueprint originals.
;Manufacturing Operations
:    This certificate represents a level of competence in handling remote access and simultaneous use of manufacturing activities. This is a good skillset for players wishing to build their own products.
;Tech I Capital Manufacturing
:    This certificate represents a level of competence in Tech I capital ships and items production. This is a good skillset for players wishing to build their own products.
;Tech I Manufacturing
:    This certificate represents a level of competence in Tech I sub-capital ships and items production. This is a good skillset for players wishing to build their own products.

---

```
Laboratory Operation I
Research I
Jury Rigging I
Metallurgy I
Industry II
Laboratory Operation II
Research II
Jury Rigging II
Metallurgy II
Industry III
Mass Production I
Advanced Industry I
Mass Production II
Advanced Industry II
Laboratory Operation III
Research III
Mass Production III
Jury Rigging III
Armor Rigging I
Astronautics Rigging I
Drones Rigging I
Electronic Superiority Rigging I
Projectile Weapon Rigging I
Energy Weapon Rigging I
Hybrid Weapon Rigging I
Launcher Rigging I
Shield Rigging I
Armor Rigging II
Astronautics Rigging II
Drones Rigging II
Electronic Superiority Rigging II
Projectile Weapon Rigging II
Energy Weapon Rigging II
Hybrid Weapon Rigging II
Launcher Rigging II
Shield Rigging II
Metallurgy III
Advanced Industry III
Armor Rigging III
Astronautics Rigging III
Drones Rigging III
Electronic Superiority Rigging III
Projectile Weapon Rigging III
Energy Weapon Rigging III
Hybrid Weapon Rigging III
Launcher Rigging III
Shield Rigging III
Mechanics IV
Industry IV
Laboratory Operation IV
Scientific Networking I
Scientific Networking II
Scientific Networking III
Research IV
Mass Production IV
Supply Chain Management I
Supply Chain Management II
Supply Chain Management III
Jury Rigging IV
Metallurgy IV
Scientific Networking IV
Supply Chain Management IV
Advanced Industry IV
Armor Rigging IV
Astronautics Rigging IV
Drones Rigging IV
Electronic Superiority Rigging IV
Projectile Weapon Rigging IV
Energy Weapon Rigging IV
Hybrid Weapon Rigging IV
Launcher Rigging IV
Shield Rigging IV
Mechanics V
Industry V
Laboratory Operation V
Advanced Laboratory Operation I
Advanced Laboratory Operation II
Advanced Laboratory Operation III
Research V
Advanced Laboratory Operation IV
Mass Production V
Advanced Mass Production I
Advanced Mass Production II
Advanced Mass Production III
Advanced Mass Production IV
Metallurgy V
Scientific Networking V
Supply Chain Management V
Advanced Industry V
Capital Ship Construction I
Capital Ship Construction II
Capital Ship Construction III
Capital Ship Construction IV
Advanced Laboratory Operation V
Advanced Mass Production V
Capital Ship Construction V
```
;Advanced Launcher Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II missile launcher related modules. This is a good skillset for players wishing to build their own products.


;Capital Missiles

:This certificate represents a level of competence in operating capital missile launchers. The holder has learned that XL torpedoes and cruise missiles are medium to long range weapons with a delayed time to impact. This is a good skillset for capsuleers specializing in capital Caldari vessels based on Dreadnought and Titan hulls.


;Large Missiles

:This certificate represents a level of competence in operating large missile launchers. The holder has learned that rapid heavy missile, torpedoes and cruise missile launchers are medium to long range weapons with a delayed time to impact. This is a good skillset for capsuleers specializing in large Caldari or Minmatar vessels based on the Battleship hulls.


;Medium Missiles

:This certificate represents a level of competence in operating medium missile launchers. The holder has learned that rapid light missile, heavy assault missiles and heavy missile launchers are short to medium range weapons with a delayed time to impact. This is a good skillset for capsuleers specializing in medium Caldari or Minmatar vessels based on Cruiser and Battlecruiser hulls.


;Small Missiles

:This certificate represents a level of competence in operating small missile launchers. The holder has learned rocket and light missile launchers are short range weapons with a delayed time to impact. This is a good skillset for capsuleers specializing in small Caldari or Minmatar vessels based on Frigate and Destroyer hulls.


;Stealth Bomber Missiles

:This certificate represents a level of competence in the deployment of timed munitions. The holder has learned that bombs are launched straight ahead and travel for a period of time before detonating. This is a good skillset for capsuleers specializing in Stealth Bombers Tech II Covert Ops Frigates.
;Battleship Navigation

:This certificate represents level of competence which ship propulsion and speed enhancing modules like Afterburners, Microwarpdrives and Micro Jump Drives. The holder is aware that those modules consume a fair amount of capacitor while active. This is a critical skill set to have for any kind of operation in hazardous space.


;Capital Navigation

:This certificate represents a level of competence with capital ships. The holder has learned that capital ships can use both stargates and their own jump drives to navigate, and that the latter causes them to accumulate jump fatigue. This is a critical skillset for any kind of capital ship movement.


;Freighter Navigation

:This certificate represents a level of competence with Freighter ship propulsion. The holder has learned that those ships are slow and vulnerable when aligning to celestial objects. This is a good skillset for any capsuleer specializing in Freighter hulls.


;Jump Drive

:This certificate represents a level of competence with ship jump drives. The holder has learned that jump drives consume fuel based on distance and allow the user to navigate without the use of Stargates. This is a critical skillset for any kind of capital or Black Ops movement.


;Navigation

:This certificate represents a level of competence with ship propulsion and speed enhancing modules like Afterburners and Microwarpdrives. The holder has learned that those modules consume a fair amount of capacitor while active. This is a critical skillset for any kind of operation in hazardous space.


;Navigation Support

:This certificate represents a level of competence with ship propulsion. It is mainly used to minimize travel time on vessels without module slots. This is a good skillset for capsuleers looking to maximize general navigation performance.
;Orca
:The Orca is designed to support a mining fleet with its command burst modules. it can fit three command burst modules without help from rigs allowing single Orca to give all the necessary mining boosts to a fleet.

:While designed as a powerful fleet booster for mining operations, the Orca also gets much use as a general freighter. It has a sizeable ship maintainance bay that can be used to store assembled ships, an ore hold, a fleet hangar and normal cargo hangar. The ship maintainance bay especially separates the Orca from other subcapital industrials as it can move assembled ships up to battlecruiser size in it. The fleet hangar is also useful in mining fleets as the fleet members can be given direct access to this hangar.

:With the maximum configuration of cargo expanding modules and rig calibration, the Orca's standard cargo hold can grow to up to an approximate of 87,000 m3 dependent on skills, but at a significant loss to EHP. A more reasonable fit with a Tech 2 Damage Control puts it into a range of 60,000 m3, still enough for a packaged battleship. 



---

```
Shield Operation I
Light Drone Operation I
Leadership I
Fuel Conservation I
Magnetometric Sensor Compensation I
Mining Foreman I
Acceleration Control I
ORE Industrial I
Drones II
Drone Avionics II
Shield Operation II
Light Drone Operation II
Leadership II
Energy Grid Upgrades II
Shield Upgrades II
Evasive Maneuvering II
Electronic Warfare II
Fuel Conservation II
Magnetometric Sensor Compensation II
Mining Foreman II
Shield Management II
Tactical Shield Manipulation II
Acceleration Control II
ORE Industrial II
High Speed Maneuvering II
Warp Drive Operation III
Signature Analysis III
Drones III
Medium Drone Operation I
Medium Drone Operation II
Drone Avionics III
Shield Operation III
Shield Compensation I
Shield Compensation II
Light Drone Operation III
Leadership III
Long Range Targeting III
Energy Grid Upgrades III
Shield Upgrades III
Evasive Maneuvering III
Electronic Warfare III
Shield Compensation III
Fuel Conservation III
Magnetometric Sensor Compensation III
Medium Drone Operation III
Mining Foreman III
Shield Management III
Tactical Shield Manipulation III
Acceleration Control III
ORE Industrial III
Capacitor Systems Operation IV
Mechanics IV
Spaceship Command IV
Navigation IV
Afterburner IV
Target Management IV
High Speed Maneuvering III
Warp Drive Operation IV
Signature Analysis IV
Drones IV
Drone Navigation I
Drone Durability I
Drone Navigation II
Drone Durability II
Drone Navigation III
Drone Durability III
Drone Avionics IV
Shield Operation IV
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
Drone Navigation IV
Light Drone Operation IV
Leadership IV
Electronics Upgrades IV
Hull Upgrades IV
Long Range Targeting IV
Energy Grid Upgrades IV
Shield Upgrades IV
Evasive Maneuvering IV
Electronic Warfare IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Compensation IV
Fuel Conservation IV
Magnetometric Sensor Compensation IV
Medium Drone Operation IV
Mining Foreman IV
Capacitor Management IV
Shield Management IV
Tactical Shield Manipulation IV
Acceleration Control IV
Power Grid Management V
CPU Management V
High Speed Maneuvering IV
Drone Durability IV
Capacitor Systems Operation V
Mechanics V
Spaceship Command V
Navigation V
Afterburner V
Target Management V
Warp Drive Operation V
Signature Analysis V
Drones V
Drone Sharpshooting I
Drone Interfacing I
Amarr Drone Specialization I
Minmatar Drone Specialization I
Gallente Drone Specialization I
Caldari Drone Specialization I
Advanced Drone Avionics I
Drone Sharpshooting II
Drone Interfacing II
Amarr Drone Specialization II
Minmatar Drone Specialization II
Gallente Drone Specialization II
Caldari Drone Specialization II
Advanced Drone Avionics II
Drone Sharpshooting III
Drone Interfacing III
Amarr Drone Specialization III
Minmatar Drone Specialization III
Gallente Drone Specialization III
Caldari Drone Specialization III
Advanced Drone Avionics III
Drone Sharpshooting IV
Drone Interfacing IV
Amarr Drone Specialization IV
Minmatar Drone Specialization IV
Gallente Drone Specialization IV
Caldari Drone Specialization IV
Advanced Drone Avionics IV
Drone Avionics V
Shield Operation V
Drone Navigation V
Drone Sharpshooting V
Light Drone Operation V
Leadership V
Command Burst Specialist I
Command Burst Specialist II
Command Burst Specialist III
Command Burst Specialist IV
Electronics Upgrades V
Hull Upgrades V
Long Range Targeting V
Energy Grid Upgrades V
Shield Upgrades V
Evasive Maneuvering V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Compensation V
Fuel Conservation V
Magnetometric Sensor Compensation V
Medium Drone Operation V
Mining Foreman V
Mining Director I
Industrial Command Ships I
Mining Director II
Mining Director III
Mining Director IV
Capacitor Management V
Shield Management V
Acceleration Control V
High Speed Maneuvering V
Drone Interfacing V
Amarr Drone Specialization V
Minmatar Drone Specialization V
Gallente Drone Specialization V
Caldari Drone Specialization V
Advanced Drone Avionics V
Drone Durability V
Mining Director V
Command Burst Specialist V
```
;Planetary Interaction

:This certificate represents the ability to survey and manage planet colonies in order to maximize resource extraction from their soil. The holder has learned that Command Centers have to be manually launched into Temperate planets before a colony may be founded. This is a good skillset for capsuleers wishing to develop an additional source of income.
;Planetary Interaction
:    This certificate represents the ability to survey and manage planet colonies in order to maximize resource extraction from their soil. The holder has learned that Command Centers have to be manually launched into Temperate planets before a colony may be founded. This is a good skillset for capsuleers wishing to develop an additional source of income.

---

```
Remote Sensing I
Interplanetary Consolidation I
Command Center Upgrades I
Remote Sensing II
Interplanetary Consolidation II
Command Center Upgrades II
Remote Sensing III
Planetology I
Planetology II
Planetology III
Interplanetary Consolidation III
Command Center Upgrades III
Remote Sensing IV
Planetology IV
Advanced Planetology I
Advanced Planetology II
Advanced Planetology III
Interplanetary Consolidation IV
Command Center Upgrades IV
Advanced Planetology IV
Remote Sensing V
Planetology V
Interplanetary Consolidation V
Command Center Upgrades V
Advanced Planetology V
```
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Eve:Plans]]
<<multilevel-toc-expandable tag:"Eve:Plans" stateTiddler:"state_Eve:Plans">>

---
;Advanced Amarr Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Amarr ship hulls. This is a good skillset for players wishing to invent that faction's Tech II ship blueprints or build their own products.


;Advanced Caldari Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Caldari ship hulls. This is a good skillset for players wishing to invent that faction's Tech II ship blueprints or build their own products.


;Advanced Gallente Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Gallente ship hulls. This is a good skillset for players wishing to invent that faction's Tech II ship blueprints or build their own products.


;Advanced Industrial Spaceship Manufacturing

:This certificate represents a level of competence in handling invention and manufacturing of Tech II small industrial ship hulls. This is a good skillset for players wishing to build their own products.


;Advanced Large Spaceship Manufacturing

:This certificate represents a level of competence in handling invention and manufacturing of Tech II large ship hulls. This is a good skillset for players wishing to build their own products.


;Advanced Medium Spaceship Manufacturing

:This certificate represents a level of competence in handling invention and manufacturing of Tech II medium ship hulls. This is a good skillset for players wishing to build their own products.


;Advanced Minmatar Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Minmatar ship hulls. This is a good skillset for players wishing to invent that faction's Tech II ship blueprints or build their own products.


;Advanced Small Spaceship Manufacturing

:This certificate represents a level of competence in handling invention and manufacturing of Tech II small ship hulls. This is a good skillset for players wishing to build their own products.


;Manufacturing Operations

:This certificate represents a level of competence in handling remote access and simultaneous use of manufacturing activities. This is a good skillset for players wishing to build their own products.


;Tech I Capital Manufacturing

:This certificate represents a level of competence in Tech I capital ships and items production. This is a good skillset for players wishing to build their own products.


;Tech I Manufacturing

:This certificate represents a level of competence in Tech I sub-capital ships and items production. This is a good skillset for players wishing to build their own products.
;Reprocessing
:    This certificate represents a level of competence in various kinds of resource reprocessing. This is a good skillset for resource-harvesting capsuleers that wish to sell their materials or use them for production.

---

```
Reprocessing I
Metallurgy I
Reprocessing II
Metallurgy II
Reprocessing III
Metallurgy III
Reprocessing IV
Plagioclase Processing I
Pyroxeres Processing I
Scordite Processing I
Veldspar Processing I
Reprocessing Efficiency I
Plagioclase Processing II
Pyroxeres Processing II
Scordite Processing II
Veldspar Processing II
Reprocessing Efficiency II
Plagioclase Processing III
Pyroxeres Processing III
Scordite Processing III
Veldspar Processing III
Reprocessing Efficiency III
Plagioclase Processing IV
Pyroxeres Processing IV
Scordite Processing IV
Veldspar Processing IV
Reprocessing Efficiency IV
Dark Ochre Processing I
Gneiss Processing I
Hedbergite Processing I
Spodumain Processing I
Dark Ochre Processing II
Gneiss Processing II
Hedbergite Processing II
Spodumain Processing II
Dark Ochre Processing III
Gneiss Processing III
Hedbergite Processing III
Spodumain Processing III
Metallurgy IV
Dark Ochre Processing IV
Gneiss Processing IV
Hedbergite Processing IV
Spodumain Processing IV
Science V
Power Grid Management V
Hydromagnetic Physics I
Hydromagnetic Physics II
Hydromagnetic Physics III
Hydromagnetic Physics IV
Reprocessing V
Hemorphite Processing I
Jaspet Processing I
Kernite Processing I
Omber Processing I
Hemorphite Processing II
Jaspet Processing II
Kernite Processing II
Omber Processing II
Hemorphite Processing III
Jaspet Processing III
Kernite Processing III
Omber Processing III
Hemorphite Processing IV
Jaspet Processing IV
Kernite Processing IV
Omber Processing IV
Plagioclase Processing V
Pyroxeres Processing V
Scordite Processing V
Veldspar Processing V
Hemorphite Processing V
Jaspet Processing V
Kernite Processing V
Omber Processing V
Reprocessing Efficiency V
Arkonor Processing I
Bistot Processing I
Crokite Processing I
Mercoxit Processing I
Ice Processing I
Arkonor Processing II
Bistot Processing II
Crokite Processing II
Mercoxit Processing II
Ice Processing II
Arkonor Processing III
Bistot Processing III
Crokite Processing III
Mercoxit Processing III
Ice Processing III
Arkonor Processing IV
Bistot Processing IV
Crokite Processing IV
Mercoxit Processing IV
Ice Processing IV
Metallurgy V
Scrapmetal Processing I
Scrapmetal Processing II
Scrapmetal Processing III
Scrapmetal Processing IV
Dark Ochre Processing V
Gneiss Processing V
Hedbergite Processing V
Spodumain Processing V
Arkonor Processing V
Bistot Processing V
Crokite Processing V
Mercoxit Processing V
Scrapmetal Processing V
Ice Processing V
```
;Industrial Reconfiguration

:This certificate represents a level of competence in handling Industrial Core modules. The holder has learned that Industrial Cores may only be used on Capital Industrial Ships, improving their resource processing abilities at the expense of mobility. This is a good skillset for capsuleers specializing in Industrial Capital Ship hulls.


;Reprocessing

:This certificate represents a level of competence in various kinds of resource reprocessing. This is a good skillset for resource-harvesting capsuleers that wish to sell their materials or use them for production.


;Resource Harvesting

:This certificate represents a level of competence in mining, ice harvesting and gas cloud harvesting. This is a good skillset for capsuleers specializing in ORE vessels.


;Salvaging

:This certificate represents a level of competence in the operation of salvaging modules. The holder has learned that salvager modules allow the extraction of components from ship wrecks. This is a good skillset for capsuleers specializing in ORE Industrials.
;Salvaging
:    This certificate represents a level of competence in the operation of salvaging modules. The holder has learned that salvager modules allow the extraction of components from ship wrecks. This is a good skillset for capsuleers specializing in ORE Industrials.

;Noctis
:


---

```
Shield Operation I
Repair Systems I
Fuel Conservation I
Magnetometric Sensor Compensation I
Mining Drone Operation I
Armor Layering I
Acceleration Control I
Drones II
Shield Operation II
Repair Systems II
Energy Grid Upgrades II
Evasive Maneuvering II
Fuel Conservation II
Magnetometric Sensor Compensation II
Mining Drone Operation II
Shield Management II
Armor Layering II
Acceleration Control II
High Speed Maneuvering II
Warp Drive Operation III
Signature Analysis III
Drones III
Shield Operation III
Repair Systems III
Long Range Targeting III
Energy Grid Upgrades III
Evasive Maneuvering III
Fuel Conservation III
Magnetometric Sensor Compensation III
Mining Drone Operation III
Shield Management III
Armor Layering III
Acceleration Control III
Capacitor Systems Operation IV
Spaceship Command IV
Navigation IV
Afterburner IV
Mechanics IV
Target Management IV
High Speed Maneuvering III
Warp Drive Operation IV
Signature Analysis IV
Drones IV
Salvage Drone Operation I
Salvage Drone Operation II
Salvage Drone Operation III
Shield Operation IV
Repair Systems IV
Electronics Upgrades IV
Hull Upgrades IV
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
Long Range Targeting IV
Energy Grid Upgrades IV
Evasive Maneuvering IV
Fuel Conservation IV
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Magnetometric Sensor Compensation IV
Mining Drone Operation IV
Capacitor Management IV
Salvaging IV
Shield Management IV
Armor Layering IV
Acceleration Control IV
Salvage Drone Operation IV
Power Grid Management V
CPU Management V
High Speed Maneuvering IV
Capacitor Systems Operation V
Spaceship Command V
Navigation V
Afterburner V
Mechanics V
Target Management V
Warp Drive Operation V
Signature Analysis V
Drones V
Shield Operation V
Repair Systems V
Electronics Upgrades V
Hull Upgrades V
Long Range Targeting V
Energy Grid Upgrades V
Evasive Maneuvering V
Fuel Conservation V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Magnetometric Sensor Compensation V
Mining Drone Operation V
Capacitor Management V
Salvaging V
Shield Management V
Armor Layering V
Acceleration Control V
Salvage Drone Operation V
High Speed Maneuvering V
```
;Data and Relic Analyzers

:This certificate represents a level of competence in the operation of analyzer modules, like Data and Relic Analyzers. The holder has learned that those modules are used in various sites related to exploration. This is a good skillset for capsuleers specializing in Exploration vessels as a whole.


;Scanning

:This certificate represents a level of competence in scanning. The holder has learned that scan probes are a specialized tool that may be used to find hidden content or to track down capsuleers inside a solar system. This is a good skillset for capsuleers specializing in Exploration vessels as a whole.
;Advanced Amarr Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Amarr items. This is a good skillset for players wishing to invent that faction's Tech II item blueprints or build their own products.


;Advanced Armor Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II armor related modules. This is a good skillset for players wishing to build their own products.


;Advanced Attack Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II attack ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Caldari Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Caldari items. This is a good skillset for players wishing to invent that faction's Tech II item blueprints or build their own products.


;Advanced Capacitor Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II capacitor related modules. This is a good skillset for players wishing to build their own products.


;Advanced Combat Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II combat ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Disruption Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II disruption ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Drone Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II drone related modules. This is a good skillset for players wishing to build their own products.


;Advanced Electronic Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II electronic related modules. This is a good skillset for players wishing to build their own products.


;Advanced Exploration Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II exploration ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Field Effect Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Smartbombs, Warfare Links and Mining Foreman related modules. This is a good skillset for players wishing to build their own products.


;Advanced Gallente Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Gallente items. This is a good skillset for players wishing to invent that faction's Tech II item blueprints or build their own products.


;Advanced Harvesting Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II harvesting related modules. This is a good skillset for players wishing to build their own products.


;Advanced Hauling Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II hauling ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Hull Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II hull related modules. This is a good skillset for players wishing to build their own products.


;Advanced Hybrid Technology

:This certificate represents a level of competence in handling invention and manufacturing of hybrid related modules. This is a good skillset for players wishing to build their own products.


;Advanced Laser Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II laser related modules. This is a good skillset for players wishing to build their own products.


;Advanced Minmatar Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Minmatar items. This is a good skillset for players wishing to invent that faction's Tech II item blueprints or build their own products.


;Advanced Missile Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II missiles as ammunition. This is a good skillset for players wishing to build their own products.


;Advanced Operations Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Siege, Triage and Cloak related modules. This is a good skillset for players wishing to build their own products.


;Advanced Projectile Technology

:This certificate represents a level of competence in handling invention and manufacturing of projectile related modules. This is a good skillset for players wishing to build their own products.


;Advanced Propulsion Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II propulsion related modules. This is a good skillset for players wishing to build their own products.


;Advanced Resource Harvesting Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II resource harvesting ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Shield Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II shield related modules. This is a good skillset for players wishing to build their own products.


;Advanced Support Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II support ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Tackling Spaceship Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II tackling ships. This is a good skillset for players wishing to invent those Tech II item blueprints or build their own products.


;Advanced Warp Inhibition Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II Stasis Webifiers, Target Painters, Warp Scramblers and Disruptors related modules. This is a good skillset for players wishing to build their own products.


;Advanced Weapon Upgrades Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech II weapon upgrades related modules. This is a good skillset for players wishing to build their own products.


;Copying

:This certificate represents a level of competence in making copies of Tech I blueprint originals. This is a good skillset for players wishing to engage in Invention or to resell their blueprint copies on the Contract system.


;Defensive Subsystem Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech III defensive subsystems. This is a good skillset for players wishing to invent those Tech III item blueprints or build their own products.


;Electronic Subsystem Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech III electronic subsystems. This is a good skillset for players wishing to invent those Tech III item blueprints or build their own products.


;Engineering Subsystem Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech III engineering subsystems. This is a good skillset for players wishing to invent those Tech III item blueprints or build their own products.


;Material Efficiency Research

:This certificate represents a level of competence in handling material efficiency research. This is a good skillset for players wishing to research their Tech I blueprint originals.


;Propulsion Subsystem Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech III propulsion subsystems. This is a good skillset for players wishing to invent those Tech III item blueprints or build their own products.


;Research Operations

:This certificate represents a level of competence in handling remote access and simultaneous use of Material Efficiency, Time Efficiency Research, copying and invention activities. This is a good skillset for players engaged in any kind of science operation.


;Spaceship Hull Subsystem Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech III ship hulls. This is a good skillset for players wishing to invent those Tech III item blueprints or build their own products.


;Time Efficiency Research

:This certificate represents a level of competence in handling time efficiency research. This is a good skillset for players wishing to research their Tech I blueprint originals.


;Weapon Subsystem Technology

:This certificate represents a level of competence in handling invention and manufacturing of Tech III weapon subsystems. This is a good skillset for players wishing to invent those Tech III item blueprints or build their own products.
Shield Tanking Skill Set

;Shield Reinforcement
:    This certificate represents a level of competence in passive shield buffers. It is mainly used to maximize Effective Hitpoints (EHP) on highly competitive ship fittings. This is a good skillset for capsuleers looking to get the most shield buffer possible on their vessel.

;Shield Tanking
:    This certificate represents a level of competence in active and passive shield-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Caldari, Minmatar vessels or any kind of ship boasting plenty of med slots to spare.

---

```
Shield Operation I
Shield Operation II
Energy Grid Upgrades II
Shield Upgrades II
Shield Management II
Tactical Shield Manipulation II
Shield Operation III
Shield Compensation I
Shield Compensation II
Energy Grid Upgrades III
Shield Upgrades III
Shield Compensation III
Shield Management III
Tactical Shield Manipulation III
Shield Operation IV
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
Energy Grid Upgrades IV
Shield Upgrades IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Compensation IV
Shield Management IV
Tactical Shield Manipulation IV
Shield Operation V
Energy Grid Upgrades V
Shield Upgrades V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Compensation V
Shield Management V
```
;Capital Remote Shield Booster

:This certificate represents a level of competence in remote capital shield support. The holder has learned that assistance rendered to other vessels involved in combat may make the vessel providing assistance a legal target. This is a good skillset for Caldari, Gallente and Minmatar Carriers and Supercarriers.


;Capital Shield Tanking

:This certificate represents a level of competence in capital shield-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Caldari and Minmatar capital ships.


;Remote Shield Booster

:This certificate represents a level of competence in remote shield support. The holder has learned that assistance rendered to other vessels involved in combat may make the vessel providing assistance a legal target. This is a good skillset for any kind of dedicated Support Frigate, Cruiser or Logistics vessel.


;Shield Reinforcement

:This certificate represents a level of competence in passive shield buffers. It is mainly used to maximize Effective Hitpoints (EHP) on highly competitive ship fittings. This is a good skillset for capsuleers looking to get the most shield buffer possible on their vessel.


;Shield Tanking

:This certificate represents a level of competence in active and passive shield-based defense. The holder has learned that it's generally wise to concentrate on one particular area of defense, such as armor or shields, on a given ship. This is a good skillset for capsuleers specializing in Caldari, Minmatar vessels or any kind of ship boasting plenty of med slots to spare.

\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Eve:Skill Plan]]
<<multilevel-toc-expandable tag:"Eve:Skill Plan" stateTiddler:"state_Eve:Skill Plan">>

---

;Social

:This certificate represents a level of competence in social connections and standings. This is a good skillset for capsuleers wishing to improve their relations with various factions and their agents.
;Advanced Target Management

:This certificate represents a level of competence with advanced targeting systems. It certifies that the holder can lock more than seven targets at the same time. This is a good skillset to have for any capsuleer training for specialized ships, like Logistics or Marauders.


;Amarr Target Management

:This certificate represents a level of competence with Amarr targeting systems. It certifies that the holder has some skill in target acquisition and management and can make use of a range of targeting-related modules. This is a critical skillset for any capsuleer facing combat.


;Caldari Target Management

:This certificate represents a level of competence with Caldari targeting systems. It certifies that the holder has some skill in target acquisition and management and can make use of a range of targeting-related modules. This is a critical skillset for any capsuleer facing combat.


;Gallente Target Management

:This certificate represents a level of competence with Gallente targeting systems. It certifies that the holder has some skill in target acquisition and management and can make use of a range of targeting-related modules. This is a critical skillset for any capsuleer facing combat.


;Minmatar Target Management

:This certificate represents a level of competence with Minmatar targeting systems. It certifies that the holder has some skill in target acquisition and management and can make use of a range of targeting-related modules. This is a critical skillset for any capsuleer facing combat.


;Supercapital Target Management

:This certificate represents a level of competence with supercapital targeting systems. It certifies that the holder has some skill in target acquisition and management and can make use of a range of targeting-related modules. This is a critical skillset for any capsuleer facing combat.
;Trade

:This certificate represents a level of competence with Trade skills, making market activity more profitable. This is a good skillset for any capsuleer wishing to lower expenses in the marketplace.
Trade Skill Plan

;Trade
:    This certificate represents a level of competence with Trade skills, making market activity more profitable. This is a good skillset for any capsuleer wishing to lower expenses in the marketplace.

---

```
Social I
Contracting I
Retail I
Broker Relations I
Contracting II
Retail II
Broker Relations II
Marketing II
Procurement I
Procurement II
Trade III
Contracting III
Retail III
Broker Relations III
Marketing III
Procurement III
Trade IV
Daytrading I
Accounting I
Daytrading II
Accounting II
Daytrading III
Accounting III
Daytrading IV
Contracting IV
Corporation Contracting I
Corporation Contracting II
Corporation Contracting III
Retail IV
Broker Relations IV
Marketing IV
Procurement IV
Visibility I
Visibility II
Visibility III
Visibility IV
Accounting IV
Advanced Broker Relations I
Advanced Broker Relations II
Advanced Broker Relations III
Advanced Broker Relations IV
Corporation Contracting IV
Trade V
Daytrading V
Contracting V
Retail V
Wholesale I
Wholesale II
Wholesale III
Wholesale IV
Broker Relations V
Marketing V
Procurement V
Advanced Broker Relations V
Accounting V
Corporation Contracting V
Wholesale V
Tycoon I
Tycoon II
Tycoon III
Tycoon IV
Tycoon V
```
|!Pieter-Michiel |!Piet Wolfgang |!Vulcan Wolfgang |!Atropos Wolfgang |
|[[Eve:Basic Skill Plan]]|>|>|>|
|[[Eve:Shield Tanking Skill Plan]]|>|>|>|
|[[Eve:Armor Tanking Skill Plan]]|>|>|>|
|[[Eve:Orca Skill Plan]]|>|>|>|

;Skill Books
```
Light Drone Operation
Leadership
Social
Mining Drone Operation
Fuel Conservation
Negotiation
Mining Upgrades
Acceleration Control
Diplomacy
Mining Connections
Distribution Connections
Security Connections
Connections
Criminal Connections
Ice Harvesting
Gas Cloud Harvesting
Astrogeology
Drone Navigation
Salvage Drone Operation
Drone Durability
Fast Talk
Advanced Weapon Upgrades
Drone Sharpshooting
Heavy Drone Operation
Drone Interfacing
Amarr Drone Specialization
Minmatar Drone Specialization
Gallente Drone Specialization
Caldari Drone Specialization
Advanced Drone Avionics
Sentry Drone Interfacing
Deep Core Mining
Repair Systems
Shield Operation
Armor Layering
Shield Compensation
Thermal Shield Compensation
EM Shield Compensation
Kinetic Shield Compensation
Explosive Shield Compensation
EM Armor Compensation
Explosive Armor Compensation
Kinetic Armor Compensation
Thermal Armor Compensation
Magnetometric Sensor Compensation
Medium Drone Operation
Mining Foreman
ORE Industrial
Command Burst Specialist
Mining Director
Industrial Command Ships
```

---

```
Light Drone Operation I
Leadership I
Social I
Mining Drone Operation I
Fuel Conservation I
Negotiation I
Mining Upgrades I
Acceleration Control I
Drones II
Drone Avionics II
Industry II
Light Drone Operation II
Leadership II
Social II
Diplomacy I
Diplomacy II
Energy Grid Upgrades II
Electronic Warfare II
Evasive Maneuvering II
Mining Drone Operation II
Fuel Conservation II
Negotiation II
Mining Upgrades II
Acceleration Control II
High Speed Maneuvering II
Warp Drive Operation III
Trade III
Drones III
Drone Avionics III
Industry III
Light Drone Operation III
Leadership III
Social III
Mining Connections I
Distribution Connections I
Security Connections I
Connections I
Criminal Connections I
Mining Connections II
Distribution Connections II
Security Connections II
Connections II
Criminal Connections II
Diplomacy III
Weapon Upgrades III
Energy Grid Upgrades III
Electronic Warfare III
Evasive Maneuvering III
Mining Drone Operation III
Fuel Conservation III
Negotiation III
Mining Connections III
Distribution Connections III
Security Connections III
Connections III
Criminal Connections III
Mining Upgrades III
Acceleration Control III
Mining IV
Ice Harvesting I
Gas Cloud Harvesting I
Astrogeology I
Ice Harvesting II
Gas Cloud Harvesting II
Astrogeology II
Ice Harvesting III
Gas Cloud Harvesting III
Astrogeology III
Capacitor Systems Operation IV
Spaceship Command IV
Navigation IV
Afterburner IV
High Speed Maneuvering III
Warp Drive Operation IV
Drones IV
Drone Navigation I
Salvage Drone Operation I
Drone Durability I
Drone Navigation II
Salvage Drone Operation II
Drone Durability II
Drone Navigation III
Salvage Drone Operation III
Drone Durability III
Drone Avionics IV
Ice Harvesting IV
Gas Cloud Harvesting IV
Drone Navigation IV
Light Drone Operation IV
Social IV
Fast Talk I
Fast Talk II
Fast Talk III
Diplomacy IV
Electronics Upgrades IV
Weapon Upgrades IV
Advanced Weapon Upgrades I
Advanced Weapon Upgrades II
Advanced Weapon Upgrades III
Energy Grid Upgrades IV
Electronic Warfare IV
Evasive Maneuvering IV
Mining Drone Operation IV
Fuel Conservation IV
Negotiation IV
Mining Connections IV
Distribution Connections IV
Security Connections IV
Capacitor Management IV
Astrogeology IV
Connections IV
Criminal Connections IV
Mining Upgrades IV
Salvage Drone Operation IV
Acceleration Control IV
Fast Talk IV
Power Grid Management V
CPU Management V
High Speed Maneuvering IV
Drone Durability IV
Mining V
Capacitor Systems Operation V
Spaceship Command V
Navigation V
Afterburner V
Warp Drive Operation V
Drones V
Drone Sharpshooting I
Heavy Drone Operation I
Drone Interfacing I
Amarr Drone Specialization I
Minmatar Drone Specialization I
Gallente Drone Specialization I
Caldari Drone Specialization I
Advanced Drone Avionics I
Drone Sharpshooting II
Heavy Drone Operation II
Drone Interfacing II
Amarr Drone Specialization II
Minmatar Drone Specialization II
Gallente Drone Specialization II
Caldari Drone Specialization II
Advanced Drone Avionics II
Drone Sharpshooting III
Heavy Drone Operation III
Drone Interfacing III
Amarr Drone Specialization III
Minmatar Drone Specialization III
Gallente Drone Specialization III
Caldari Drone Specialization III
Advanced Drone Avionics III
Drone Sharpshooting IV
Heavy Drone Operation IV
Drone Interfacing IV
Sentry Drone Interfacing I
Sentry Drone Interfacing II
Sentry Drone Interfacing III
Amarr Drone Specialization IV
Minmatar Drone Specialization IV
Gallente Drone Specialization IV
Caldari Drone Specialization IV
Advanced Drone Avionics IV
Sentry Drone Interfacing IV
Drone Avionics V
Ice Harvesting V
Gas Cloud Harvesting V
Drone Navigation V
Drone Sharpshooting V
Light Drone Operation V
Social V
Diplomacy V
Advanced Weapon Upgrades IV
Electronics Upgrades V
Weapon Upgrades V
Energy Grid Upgrades V
Evasive Maneuvering V
Mining Drone Operation V
Fuel Conservation V
Negotiation V
Mining Connections V
Distribution Connections V
Security Connections V
Capacitor Management V
Astrogeology V
Deep Core Mining I
Deep Core Mining II
Deep Core Mining III
Deep Core Mining IV
Connections V
Criminal Connections V
Mining Upgrades V
Salvage Drone Operation V
Acceleration Control V
Fast Talk V
High Speed Maneuvering V
Heavy Drone Operation V
Drone Interfacing V
Amarr Drone Specialization V
Minmatar Drone Specialization V
Gallente Drone Specialization V
Caldari Drone Specialization V
Advanced Drone Avionics V
Sentry Drone Interfacing V
Drone Durability V
Deep Core Mining V
Advanced Weapon Upgrades V
Repair Systems I
Shield Operation I
Armor Layering I
Repair Systems II
Shield Operation II
Shield Upgrades II
Shield Management II
Armor Layering II
Tactical Shield Manipulation II
Repair Systems III
Shield Operation III
Shield Compensation I
Shield Compensation II
Shield Upgrades III
Shield Compensation III
Shield Management III
Armor Layering III
Tactical Shield Manipulation III
Mechanics IV
Repair Systems IV
Shield Operation IV
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
Hull Upgrades IV
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
Shield Upgrades IV
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Compensation IV
Shield Management IV
Armor Layering IV
Tactical Shield Manipulation IV
Mechanics V
Repair Systems V
Shield Operation V
Hull Upgrades V
Shield Upgrades V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Compensation V
Shield Management V
Armor Layering V
Magnetometric Sensor Compensation I
Medium Drone Operation I
Mining Foreman I
ORE Industrial I
Magnetometric Sensor Compensation II
Medium Drone Operation II
Mining Foreman II
ORE Industrial II
Signature Analysis III
Long Range Targeting III
Magnetometric Sensor Compensation III
Medium Drone Operation III
Mining Foreman III
ORE Industrial III
Target Management IV
Signature Analysis IV
Leadership IV
Long Range Targeting IV
Magnetometric Sensor Compensation IV
Medium Drone Operation IV
Mining Foreman IV
Target Management V
Signature Analysis V
Leadership V
Command Burst Specialist I
Command Burst Specialist II
Command Burst Specialist III
Command Burst Specialist IV
Long Range Targeting V
Magnetometric Sensor Compensation V
Medium Drone Operation V
Mining Foreman V
Mining Director I
Industrial Command Ships I
Mining Director II
Mining Director III
Mining Director IV
Mining Director V
Command Burst Specialist V
```

|!Pieter-Michiel |!Piet Wolfgang |!Vulcan Wolfgang |!Atropos Wolfgang |
|[[Eve:Planetary Interaction Skill Plan]]  |[[Eve:Exploration Skill Plan]]  |[[Eve:Resource Processing]]  |[[Eve:Trade]]  |
|[[Eve:Exploration Skill Plan]]|[[Eve:Salvaging Skill Plan]]|[[Eve:Manufacturing Skill Plan]]| |
|[[Eve:Battleship Skill Plan]]|>|>|>|


---

<$list filter="[tag[Eve:Certificates]!sort[created]]">
<br/>
<$transclude field="caption" mode="block"/>
<$transclude field="text" mode="block"/>
<br/>
<hr/>
</$list>
External images in TiddlyWiki are tiddlers that point to the URI of an image, rather than embedding the full image data. They can perform better than embedded images, particularly with large numbers or sizes of images. However, using them breaks the single file pattern of TiddlyWiki.

External images are used in the browser. They can be created by the Node.js configuration when it builds a TiddlyWiki, or they can be created manually within the browser.

! What is an External Image

An external image is an ordinary image tiddler that has a ''_canonical_uri'' field containing the URI of the image. The URI can be absolute or relative to the HTML document. If the canonical URI is provided then the ''text'' field of the tiddler is ignored and so should be omitted.

! Manually Creating External Images

To manually create an external image just create the tiddler with the appropriate image content type, and add a ''_canonical_uri'' field with a URI pointing to the actual image location.

''IMPORTANT:'' Double-check your spelling. ``_canonical_uri`` is spelled [[URI|https://en.wikipedia.org/wiki/URI#The_relationship_between_URIs.2C_URLs.2C_and_URNs]], not URL.

! Creating external images under Node.js

The following steps are used to create a static HTML file version of a wiki accompanied by an ''images'' folder containing the referenced external images:

# Create image tiddlers in your TiddlyWikiFolders in the usual way
# Save the images as separate files (by convention, in a subfolder named ''images'')
# Externalise the image tiddlers by giving them a ''_canonical_uri'' field
# Save the main HTML file

Note the image files must be saved before they are externalised. Externalising them destroys the ''text'' field within the in-memory copy of the wiki store, meaning that attempts to save them will fail.

For an example see the ''externalimages'' build target of the demo ''tw5.com'' wiki:

```
--savetiddlers [is[image]] images
--setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain
--setfield [is[image]] text "" text/plain
--rendertiddler $:/core/save/all externalimages.html text/plain
```

!! Saving Separate Image Files

The following `--savetiddlers` command can be used to save the images of a wiki into an ''images'' subfolder:

```
--savetiddlers [is[image]] images
```

!! Externalising Image Tiddlers

Two `--setfield` commands are used: the first sets the ''_canonical_uri'' field to a URI derived from the title of the tiddler, and the second clears the text field.

```
--setfield [is[image]] _canonical_uri $:/core/templates/canonical-uri-external-image text/plain
--setfield [is[image]] text "" text/plain
```

The template tiddler [[$:/core/templates/canonical-uri-external-image]] contains:

<pre>

<$view tiddler="$:/core/templates/canonical-uri-external-image" field="text" format="text"/>

</pre>

Note that these operations modify the tiddlers in the wiki store and so may affect the operation of subsequent commands.

! Using External Images

You can't edit an external image directly in the browser except by changing the URI field to point to a different image.
{{Status}}
[img class=float-right [$:/favicon.ico]]

!! Introduction
{{Introduction}}

!! Tutorial
To see how favorites plugin works and what is its unique features have a look at [[Favorites Tutorial]]. There are some more specific examples in [[Favorites More Examples]]

!! Install
<<<
;Packaged plugin
#Drag and drop $:/plugins/kookma/favorites into your wiki
#Save and reload your wiki

;Client-Server installation (separate files)
*For Node.js (server version) download the favorites folder from [[source|https://github.com/kookma/favorites]] folder and paste in your Tiddlywiki plugins folder
*For local installation put the favorites folder into your local plugins folder under your wiki folder

*Demo: https://kookma.github.io/TW-Favorites/
*Code: https://github.com/kookma/TW-Favorites

//It is highly recommended to backup your data before trying any new plugin! Do it before installing Favorites//

;Important note
:Before installation, uninstall any Favorites plugin 3.x.y. Favorites plugin 4+ is not compatible with version 3.
<<<

!! History
For latest change and new features have a loo at [[plugin history|$:/plugins/kookma/favorites/history]].

!! Reference
# https://en.wikipedia.org/wiki/Bookmark_(digital)

!! Acknowledgement
{{Acknowledgement}}
* `[tag[x]tag[y]]` all tiddlers tagged with both x and y
* `[tag[x]] [tag[y]]` all tiddlers tagged either x or y

Ref: https://tiddlywiki.com/#Introduction%20to%20filter%20notation


! Example
* Case I: ''and''
```
<$list filter="[tag[learning]tag[slide]]">
<<currentTiddler>>
</$list>
```
<<<
<$list filter="[tag[learning]tag[slide]]">
<<currentTiddler>>
</$list>
<<<

* Case II: ''or''
```
<$list filter="[tag[exmp013]][tag[exmp02]]">
<<currentTiddler>><br>
</$list>
```
<<<
<$list filter="[tag[exmp03]][tag[exmp02]]">
<<currentTiddler>><br>
</$list>
<<<
[img[Flashlight Tower.image.04.png]]
[img[Flashlight Tower.image.01.png]]
[img[Flashlight Tower.image.05.png]]
[img[Flashlight Tower.image.03.png]]
[img[Flashlight Tower.image.02.png]]
@@.image-float-centre

@@<br>

<div style="clear: both;">

---
@@.image-float-left

@@

<div style="clear: both;">

---
@@.image-float-right


@@<br>

YOURTEXT


<div style="clear: both;">

---
There is a wikitext syntax for images eg: `[img[Motovun Jack.jpg]]`. But what if I want to center the image. Or if I want the image left or right aligned and the text should flow around the image. 

There are 3 macros now.

* `<<image-left "Motovun Jack.jpg">>`
* `<<image-center "Motovun Jack.jpg">>`
* `<<image-right "Motovun Jack.jpg">>`

<<image-left "Motovun Jack.jpg" caption:"//floating image//">>

```
<<image-left "Motovun Jack.jpg">>
```
Activates a `float-left` CSS rule for the image container. 

If you want to add a caption to the image, just use: 

```
<<image-left "Motovun Jack.jpg" caption:"//floating image//">>
```

@@.image-text
As you can see, inline formatting rules can be used. 
@@

The image below will be centred and slightly bigger. There is no text flow around the image. The macro is used like this:

```
<<image-center "Motovun Jack.jpg" caption:"centered image" width:"50%">>
```

<<image-center "Motovun Jack.jpg" caption:"centered image" width:"50%">>

<<image-right "Motovun Jack.jpg" caption:"''float right''" tooltip:"Motovun Jack - The TiddlyWiki Mascot">>

This image uses:

```
<<image-right "Motovun Jack.jpg" caption:"''float right''" tooltip:"Motovun Jack - The TiddlyWiki Mascot">>
```

@@.image-text
Since "float-left" and "float-right" CSS rules have some effects on the text flow, we need a mechanism, that disables this effect. 
So we need to assign a special class to the last paragraph of this page: eg: `@@.image-text ... @@`
@@

\define image-left(name, width:"33%", tooltip, caption)
<div class="image-float-left" style="width:$width$">
[img width="100%" [$tooltip$|$name$]]
$caption$
</div>
\end

\define image-right(name, width:"33%", tooltip, caption)
<div class="image-float-right" style="width:$width$">
[img width="100%" [$tooltip$|$name$]]
$caption$
</div>
\end

\define image-center(name, width:"33%", tooltip, caption)
<div class="image-center" style="width:$width$">
[img width="100%" [$tooltip$|$name$]]
$caption$
</div>
\end
!!!✒[[Forces of the Battle of Arras]]
<<tabs tabsList:"[tag[Forces of the Battle of Arras]!title[Forces of the Battle of Arras]!sort[modified]]" "$:/state/popup/tabs">>




!![img[French Forces.image]] [[French Equipment of the Battle of Arras]]
<<<
<div class="tc-table-of-contents"><<toc-selective-expandable 'French Equipment of the Battle of Arras'>></div>
<<<
---

* [[Char L&eacute;ger FT17/18|Char L&eacute;ger FT17/18 (FR-01.1)]]
* [[AMR33 Renault VM|AMR33 Renault VM (FR-02)]]
* [[AMR Renault ZT|AMR Renault ZT (FR-03)]]
* [[Char L&eacute;ger Renault R35|Char L&eacute;ger Renault R35 (FR-04.1)]]
* [[Char L&eacute;ger Renault FCM36|Char L&eacute;ger Renault FCM36 (FR-05)]]
* [[Char de Cavalerie Hotchkiss H35|Char de Cavalerie Hotchkiss H35 (FR-06.1)]]
* [[Char de Cavalerie Hotchkiss H39|Char de Cavalerie Hotchkiss H39 (FR-07)]]
* [[Char de Cavalerie Somua S35|Char de Cavalerie Somua S35 (FR-08)]]
* [[Char Moyens Renault D2|Char Moyens Renault D2 (FR-09)]]
* [[Char de Bataille B1 bis|Char de Bataille B1 bis (FR-10)]]
* [[Chenillette Lorraine 37L|Chenillette Lorraine 37L (FR-11)]]
* [[Chenillette Renault UE31|Chenillette Renault UE31 (FR-12)]]
* [[Citroen-K&eacute;gresse P19 Portee|Citroen-K&eacute;gresse P19 Portee (FR-13)]]
* [[Citroen-K&eacute;gresse P19|Citroen-K&eacute;gresse P19 (FR-14)]]
* [[AMD Panhard 178|AMD Panhard 178 (FR-15)]]
* [[Laffly S20 TL Port&eacute;e|Laffly S20 TL Port&eacute;e (FR-16)]]
* [[Laffly W-15 TCC Chasseur de Chars|Laffly W-15 TCC Chasseur de Chars (FR-17.1)]]
* [[Voiture Citroen II BL|Voiture Citroen II BL (FR-18)]]
* [[Laffly W-15 or 20 TL|Laffly W-15 or 20 TL (FR-19)]]
* [[Citroen 23|Citroen 23 (FR-20)]]
* [[Motorcyclette|Motorcyclette (FR-21)]]
* [[Avant-train|Avant-train (FR-22)]]
* [[75mm Mle 1897|75mm Mle 1897 (FR-23)]]
* [[25mm Hotchkiss Mle 1934|25mm Hotchkiss Mle 1934 (FR-24)]]
* [[47mm APX Mle 1937|47mm APX Mle 1937 (FR-25)]]
* [[25mm Hotchkiss Mle 1938 Contre Avions|25mm Hotchkiss Mle 1938 Contre Avions (FR-26)]]
* [[Fusiliers|Fusiliers (FR-27)]]
* [[Dragons Port&eacute;s|Dragons Port&eacute;s (FR-28)]]
* [[Commandant|Commandant (FR-29)]]
* [[Groupe Franc|Groupe Franc (FR-30)]]
* [[Cavalerie|Cavalerie (FR-31)]]
* [[Observateur d'Artillerie|Observateur d'Artillerie (FR-32)]]
* [[Mitrailleuse Hotchkiss Mle 1914|Mitrailleuse Hotchkiss Mle 1914 (FR-33.1)]]
* [[Mortier L&eacute;ger Brandt Mle 1935|Mortier L&eacute;ger Brandt Mle 1935 (FR-34)]]
* [[Mortier Moyen Brandt Mle 1927/31|Mortier Moyen Brandt Mle 1927/31 (FR-35)]]
* [[Renault AGR|Renault AGR (FR-P01)]]
* [[37mm Schneider Contre Avions|37mm Schneider Contre Avions (FR-P02)]]
* [[VB Bomb Thrower|VB Bomb Thrower (FR-P03)]]
* [[7.5cm Schneider Contre Avions|7.5cm Schneider Contre Avions (FR-P04)]]
* [[AMC Schneider Kegresse P16|AMC Schneider Kegresse P16 (FR-P05)]]
* [[LMG FM 1924/29|LMG FM 1924/29 (FR-P06)]]
* [[Sapeurs/Mineurs|Sapeurs/Mineurs (FR-P07)]]
* [[Pionnier|Pionnier (FR-P08)]]
* [[Laffly 50 AM|Laffly 50 AM (FR-P09)]]
* [[Mitrailleuse Hotchkiss Mle 1914 (AA)|Mitrailleuse Hotchkiss Mle 1914 (AA) (FR-P10)]]
* [[20mm Oerlikon CA mle 1939|20mm Oerlikon CA mle 1939 (FR-P11)]]
* [[Supply Wagon|Supply Wagon (FR-P12)]]
* [[Horse Limber|Horse Limber (FR-P13)]]
* [[37mm Infantry Gun|37mm Infantry Gun (FR-P14)]]
* [[Mounted Eclaireurs|Mounted Eclaireurs (FR-P15)]]
* [[Dismounted Eclaireurs|Dismounted Eclaireurs (FR-P16)]]
* [[AMR Renault ZT|AMR Renault ZT (FR-P17)]]
* [[Schneider 155mm C 17|Schneider 155mm C 17 (FR-P18)]]
* [[Laffly V15-R VLTT|Laffly V15-R VLTT (FR-P19)]]
* [[Laffly S20 TL 6x6 VDP|Laffly S20 TL 6x6 VDP (FR-P20)]]
* [[Laffly W15 T, 6x6|Laffly W15 T, 6x6 (FR-P21)]]
* [[Laffly V15 T, 4x4|Laffly V15 T, 4x4 (FR-P22)]]

---

;Painting Guides
:https://thetacticalpainter.blogspot.com/2019/09/painting-french-armour-for-1940.html
:https://www.flamesofwar.com/Default.aspx?tabid=110&art_id=2417&kb_cat_id=27
:https://www.flamesofwar.com/Default.aspx?tabid=53&art_id=2179
:[img[French Armor Paint Colors.image]]
:Included colors:-
::    A.MIG-060 : Pale Green
::    A.MIG-061 : Warm Sand-Yellow
::    A.MIG-062 : French Blue
::    A.MIG-063 : Pale Grey
::    A.MIG-064 : Earth Brown
::    A.MIG-065 : Forest Green

;French Colors (AFV)
:862 Black Grey
:201 Black Shade
:912 Tan Yellow
:895 Gunship Green
:983 Flat Earth
:822 German Camo Black Brown

;French Uniform
:888 Olive Grey
:879 Green Brown
:824 German Camo Orange Ochre
:821 German Camo Beige
:955 Flat Flesh
:875 Beige Brown
:863 Gunmetal
:872 Chocolate Brown
!![img[French Forces.image]] [[French Forces of the Battle of Arras]]
<<<
<div class="tc-table-of-contents"><<toc-selective-expandable 'French Forces of the Battle of Arras'>></div>
[img[Generic Metal Coins for Boardgames.image]]

;Source
:[[Eagle Games|https://www.eaglegames.net/Generic-Metal-Coins-Set-of-110-Lisboa-Brass-p/102116.htm]]
;GU Douglasville Office Contact Information
:6001 Professional Parkway Suite 1030
:Douglasville, GA 30134
: (770) 942-2478

;BPH

;Charles Kaplan, M.D.
:[img height=200 [Charles Kaplan, M.D.image]]

;Appointments
:6 Jan 2020 13:30
!![img[German Forces.image]] [[German Forces of the Battle of Arras]]
<<<
<div class="tc-table-of-contents"><<toc-selective-expandable 'German Forces of the Battle of Arras'>></div>
<div style="clear: both;"></div><<image-left "German Painting Guide For Early War.20200930" caption:"German Painting Guide For Early War"  width:"400px">>

JOURNALTEXT


<div style="clear: both;">

---
\define lingo-base() $:/language/ControlPanel/Basics/
Welcome to ~TiddlyWiki and the ~TiddlyWiki community

Before you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details

!! Set up this ~TiddlyWiki

<div class="tc-control-panel">

|<$link to="$:/SiteTitle"><<lingo Title/Prompt>></$link> |<$edit-text tiddler="$:/SiteTitle" default="" tag="input"/> |
|<$link to="$:/SiteSubtitle"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler="$:/SiteSubtitle" default="" tag="input"/> |
|<$link to="$:/DefaultTiddlers"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag="textarea" tiddler="$:/DefaultTiddlers"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |
</div>

See the [[control panel|$:/ControlPanel]] for more options.
!FLEET COMMANDER

;1 Chaos Warmaster 

You must include a Chaos Warmaster in your fleet, even if it is worth 750 points or less. He must be assigned to the biggest (ie, most expensive) ship and improves its Leadership to the value shown below.

|Chaos Warmaster (Ld 8 )  | 50 pts |
|Chaos Warmaster (Ld9)  | 100 pts |

Chaos Warmasters get one re-roll. In addition they may be given up to four Marks of Chaos as shown below (no Mark may be taken more than once).

|The Mark of Slaanesh | +25 pts |The Chaos Warmaster is accompanied by the dissonant, siren cry of the Daemons of Slaanesh, the prince of pain and pleasure. Enemy ships within 15cm of the Chaos Warmaster’s ship suffer -2 to their Leadership value. |
|The Mark of Khome | +20 pts |The Chaos Warmaster and his followers chant their prayers to Khome as they await the opportunity to spill blood in hand-to-hand conflict. The Chaos Warmaster’s ship doubles its value in boarding actions and adds +1 to any rolls for inflicting critical damage in a boarding action. |
|The Mark of Tzeentch | +30 pts |The Chaos Warmaster benefits from the patronage of the Changer of Ways, his Daemonic prescience giving him command of the Fates. The Chaos Warmaster gains an extra re-roll. |
|The Mark of Nurgle | +35 pts |The Chaos Warmaster’s ship is rank with putrescence and his followers bear the awful marks of morbidity and decay. The Chaos Warmaster’s ship gains 1 damage point and may not be boarded. |

;0-3 Chaos Lords 

You may include up to three Chaos Lords in your fleet. Each Chaos Lord must be assigned a ship and improves its Leadership rating to the value shown.

|Chaos Lord (Ld 8) | 50 pts |

A Chaos Lord may be given up to one of the following Marks of Chaos.

|The Mark of Slaanesh | +25 pts |Enemy ships within 15cm of the Chaos Lord’s ship suffer -2 to their Leadership value.<br>The Mark of Slaanesh is an area effect that is not affected by line of sight obstructions. |
|The Mark of Khome | +20 pts |The Chaos Lord’s ship doubles its value in boarding actions. |
|The Mark of Tzeentch | +30 pts |The Chaos Lord gains a re-roll. |
|The Mark of Nurgle | +35 pts |The Chaos Lord’s ship gains a damage point and may not be boarded. |


!Capital Ships

!!Battleships 

You may include up to one battleship in your fleet for every three cruisers or heavy cruisers.

|Chaos Despoiler-class battleship | 400 pts |
|Chaos Desolator-class battleship | 300 pts |

!!Grand Cruisers 

You may include up to one grand cruiser in your fleet for every three cruisers or heavy cruisers.

|Chaos Repulsive-class grand cruiser | 230 pts |


!!Heavy Cruisers 

You may include up to one heavy cruiser in your fleet for every two cruisers.

|Chaos Styx-class heavy cruiser | 290 pts |
|Chaos Hades-class heavy cruiser | 200 pts |
|Chaos Acheron-class heavy cruiser | 190 pts |


!!Cruisers

0-12 Cruisers 

|Chaos Devastation-class cruiser | 190 pts |
|Chaos Murder-class cruiser | 170 pts |
|Chaos Camage-class cruiser | 180 pts |
|Chaos Slaughter-class cruiser | 165 pts |

!Escorts

You can include any number of escorts in your fleet.

|Chaos Idolater-class raider | 45 pts |
|Chaos Infidel-class raider | 40 pts |
|Chaos Iconoclast-class destroyer | 30 pts |

!Ordnance

Ships with launch bays can have a mixture of Swiftdeath fighters, Doomfire bombers or Dreadclaw assault craft. Ships with torpedo tubes are armed with normal and boarding torpedoes.
!Fleet Commander

;0-1 Pirate Prince

You may include 1 Pirate Prince in your fleet, who must be assigned to a ship and adds +2 to its Leadership, to a maximum of 10. If the fleet is worth over 750 points a Pirate Prince must be included to lead it.

|Pirate Prince (Ld+2) | 100 pts |

You may purchase Fleet Commander re-rolls for your Pirate Prince by paying the cost listed below.

|One re-roll | 25 pts |
|Two re-rolls | 50 pts |
|Three re-rolls | 100 pts |

!Capital Ships

;0-12 Cruisers

|Eldar Eclipse class cruiser | 250 pts |
|Eldar Shadow class cruiser | 210 pts |

!Escorts

Your fleet may have any number of escorts.

|Eldar Hellebore class frigate | 75pts |
|Eldar Aconite class frigate | 65pts |
|Eldar Hemlock class destroyer | 40pts |
|Eldar Nightshade class destroyer | 40pts |

!Ordnance

Any ship with launch bays may choose to have them launch any mix of Darkstar fighters and Eagle bombers. Ships with torpedo tubes are armed with Eldar torpedoes.
|!Grand Cruiser<br>;Hits<br>:10<br>;Speed<br>:10<br>;Turns<br>:45 deg<br>;Shields<br>:3<br>;Armor<br>:5+<br>;Turrets<br>:3 |<|[img height=200 [Governor Class Grand Cruiser.image]]|!Armament|!,,Range,,<br>^^Speed^^|!,,Firepower,,<br>^^Strength^^|!Fire Arc|
|~|Dorsal Weapon Batteries | 60cm | 6 | Left/Front/Right |
|~|Port Lance Batteries | 45cm | 4 | Left |
|~|Starboard Lance Batteries | 45cm | 4 | Starboard |
|~|Prow Torpedoes | 30cm | 6 | Front |
@@.image-float-right
;Link
:https://tobibeer.github.io/tw5-plugins/#Welcome
:[[Tobias Beer Plugins Library]]
@@<br>

This wiki provides the documentation for all TiddlyWiki plugins by Tobias Beer.

<div style="clear: both;">

---
[img height=200 [Green Tea Leaves as Flocking.image]]

;Notes
:Soak in glycerin & dry. Then of course seal it. Just did this with some leaves I cut for basing. Glycerin is used to help keep the color.
The survivors of the ill-fated Grenouille expedition have just returned to Syrtis Major. Dr. Jonathan Hollingsworth, after seeing to the hospitalization of his fellow expedition members, read a brief statement. He confirmed the death of Dr. Grenouille and all other members of the original expedition, the only survivors being the visiting scientific team Dr. Hollingsworth accompanied to the dig site. Dr. Hollingsworth went on to say that the deaths were due to a raid by Martian tribesmen, and that rumors circulating about ritual mutilations and Martian vampires were totally untrue. Dr. Hollingsworth also said that the scientific team had found a secret chamber under the site, but he would not say what was found there.

; {{!!title}}
: OCR only the parts that I need for the Punic Wars.
: Use these trimmed down rules for the Wofun Punic Wars range.
<$link to="Hail Caesar">[img height=150 [Hail Caesar.image]]</$link> 


;Source
:https://www.patreon.com/highlands_miniatures
:3d Model Artist
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Hobby]]
<<multilevel-toc-expandable tag:"Hobby" stateTiddler:"state_Hobby">>
;Sources
:http://necrotales.com/necroTutorials/
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]

<<multilevel-toc-expandable tag:"Hobby:Reading" stateTiddler:"state_Hobby:Reading">>


To create a new tab in the sidebar menu:

# Create a tiddler and tag it with the [[SystemTag|SystemTags]] tag [[$:/tags/SideBar]]
#* To create a table of contents you can populate the new tab tiddler using the [[table-of-contents macros|Table-of-Contents Macros]]. For example, see the [[TableOfContents]] used here
# By default, the tiddler title is used as the tab title but you can override it using the `caption` field
# To define the tab ordering, use the `list-after` or `list-before` fields as discussed in [[Tagging]]
#* For example: set `list-after` to [[$:/core/ui/SideBar/Open]] to place a sidebar tab immediately after the "Open" tab

Note that you can create new tabs under the "More" tab in the same way by using the tag `$:/tags/MoreSideBar`.
# Move the PDF files into the TiddlyWiki folder.
# Select all the PDF files and Shift+Right Click for //Save Path As//
# Paste the results into a Notepad++ file.
# Use the following REGEX Replace Command:
##[img[PDF Tiddler.image.01]]
##``"D:\\notebook\\The Battle of Arras\\(.*?).pdf"``
##``++\r\n\1\r\n_canonical_uri: .\\\1.pdf\r\ncreated: 20200912003833325\r\nmodified: 20200912004048661\r\ntags: \r\ntitle: \1\r\ntype: application/pdf``
# Use GSplit to create Tiddlers based on the ``++`` of each entry.
# Import into the TW.
#Go to microsoft store and install "3D Viewer" it's free and it takes 10 seconds or less

#Go to windows file explorer and activate the preview pane

#Go to a folder where you have saved an STL file

#Right click on it and choose "Open with..." > "Choose another app" > Select "3D Viewer" and before clicking OK place a check in "Always use this app to open .stl files"

[img[How to preview STL in Windows 10 Preview.image]]

;Alternate Software
:https://github.com/unlimitedbacon/stl-thumb/releases
;Example
:``<$transclude tiddler={{!!icon}}/>``
There are already a couple methods in ~TiddlyWiki for transcluding tiddlers in 'tooltips', i.e., popup windows. But they don't work well when exporting tiddlers to static html files. The instructions below will give you a clunky but rudimentary way to have the following:

*A link within a tiddler that leads to an external webpage of your choosing
*With the alias of your choosing
*That when hovered transcludes the entirety of a second tiddler in a tooltip popup
*And includes scrolling in case your tiddler is longer than the size of the tooltip popup.

Note: I originally developed this thinking of people who generate entire static websites from ~TiddlyWiki tiddlers, and who want previews of the other tiddlers when hovering over links to those tiddlers. But this method could also be used to display definitions of terms over the terms themselves, references to other works such as Bible verses, etc. 

Also, the link is not a necessary part of this process. You could use this simply use it to have popups when hovering over text, without any link at all.

Now, finally, here are the instructions:

!!1. Seeing the final result, first

Hover over the link below:

<div class="tooltip"><a href="https://giffmex.org">Giffmex</a><div class="tooltiptext"><$transclude tiddler="Untagged Tiddlers" mode="block"/></div></div>

The link above is to my website, https://giffmex.org, with the link written out as the alias Giffmex, with a tooltip that transcludes the tiddler 'New Tiddler'. 

!!2. Great! How does it work?

Here is the code:

`<div class="tooltip"><a href="https://giffmex.org">Giffmex</a><div class="tooltiptext"><$transclude tiddler="New Tiddler" mode="block"/></div></div>`

For your convenience, I have created a button so you can paste this code with the click of a button, and fill it out. Edit this tiddler, insert your cursor to type somewhere in the text field, and press the next to last button in the editortoolbar (<<icon {{$:/user/images/popup-link}}"" >>). When you do, it will paste the code below:

`<div class="tooltip"><a href="XXX">YYY</a><div class="tooltiptext"><$transclude tiddler="ZZZ" mode="block"/></div></div>`

Just replace the XXX with the site you want linked to, YYY with the text to be displayed (called the 'alias'), and ZZZ with the tiddler you want transcluded in the tooltip popup window.

!!3. Nice! Now what do I need in my ~TiddlyWiki file to make this work?

Just drag the three links below into your own file:

*$:/.giffmex/.Stylesheet4popups
*$:/.giffmex/EditorToolbar/linkpopups
*$:/user/images/popup-link

You should be all set! This will work even if you export your tiddler as a static HTML file, using the more menu (down arrow), selecting 'Export tiddler', and selecting 'Static HTML'. You can try it with this tiddler right now, if you like.

!!4. Hey, wait, what about if I don't want a link, just popups?

That is just a matter of removing the 'a' tags around the alias, so you end up with this:

`<div class="tooltip">YYY<div class="tooltiptext"><$transclude tiddler="ZZZ" mode="block"/></div></div>`

See the result below:

<div class="tooltip">YYY<div class="tooltiptext"><$transclude tiddler="Untagged Tiddlers" mode="block"/></div></div>

Here are the links for that button, which will have the icon (<<icon {{$:/user/images/popup-unlink}} "" >>).

*$:/.giffmex/EditorToolbar/unlinkedpopups
*$:/user/images/popup-unlink

!!5. Acknowledgments

A big thank you to Julio Peña for creating the icons for the two buttons!
|Howard Hues 1031 - Cossack Purple |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Cossack Purple.jpg]] |
|Howard Hues 1052 - Rifle Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Rifel Green.jpg]] |
|Howard Hues 1053 - Austrian Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Austrian Green.jpg]] |
|Howard Hues 1058 - Olive Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Olive Green.jpg]] |
|Howard Hues 1065 - Leather Chaps |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Leather Chaps.jpg]] |
|Howard Hues 1069 - Desert Battledress |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Desert Battledress.jpg]] |
|Howard Hues 1071 - Leatherwork |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Leatherwork.jpg]] |
|Howard Hues 1072 - Battledress |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Battledress.jpg]] |
|Howard Hues 1073 - WWI Russian Brown |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/WWI Russian Brown.jpg]] |
|Howard Hues 1081 - French Lancer Pink |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/French Lancer Pink.jpg]] |
|Howard Hues 1085 - Guards Red |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Guards Red.jpg]] |
|Howard Hues 1087 - Austrian Red |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Austrian Red.jpg]] |
|Howard Hues 1091 - Dutch Lancer Orange |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Dutch Lancer Orange.jpg]] |
|Howard Hues 1095 - Musician Yellow |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Muscian Yellow.jpg]] |
|Howard Hues 1099 - Yellow Facing |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Yellow Facing.jpg]] |
|Howard Hues 1106 - Concrete |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Concrete.jpg]] |
|Howard Hues 1114 - Field Stone |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Fieldstone.jpg]] |
|Howard Hues 1118 - Slate |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Slate.jpg]] |
|Howard Hues 1141 - GEO-HEX® Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/GeoHex Green.jpg]] |
|Howard Hues 1142 - GEO-HEX® Desert |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/GeoHex Desert.jpg]] |
|Howard Hues 1143 - GEO-HEX® Brown |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/GeoHex Brown.jpg]] |
|Howard Hues 1144 - GEO-HEX® Tan |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/GeoHex Tan.jpg]] |
|Howard Hues 1154 - Grass Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Grass Green.jpg]] |
|Howard Hues 1163 - Brick Red |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Brick Red.jpg]] |
|Howard Hues 1165 - Wood Brown |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Wood.jpg]] |
|Howard Hues 1166 - Old Wood |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Old Wood.jpg]] |
|Howard Hues 1167 - Canvas |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Canvas.jpg]] |
|Howard Hues 1168 - Old Thatch |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Old Thatch.jpg]] |
|Howard Hues 1184 - Linen |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Linen.jpg]] |
|Howard Hues 1187 - Deck Plank |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Deckplank.jpg]] |
|Howard Hues 1302 - Fair Maiden |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Fair Maiden.jpg]] |
|Howard Hues 1305 - Flesh |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Flesh.jpg]] |
|Howard Hues 1307 - Ruddy Flesh |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Ruddy Flesh.jpg]] |
|Howard Hues 1309 - Suntan |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Suntan.jpg]] |
|Howard Hues 1312 - Mid-East Flesh |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Med-East Flesh.jpg]] |
|Howard Hues 1314 - Oriental Flesh |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Oriental Flesh.jpg]] |
|Howard Hues 1318 - Native American |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Native American.jpg]] |
|Howard Hues 1323 - Nubian |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Nubian.jpg]] |
|Howard Hues 1402 - Equine White |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Equine White.jpg]] |
|Howard Hues 1412 - Equine Grey |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Equine Grey.jpg]] |
|Howard Hues 1422 - Equine Black |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Equine Black.jpg]] |
|Howard Hues 1461 - Equine Brown |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Equine Brown.jpg]] |
|Howard Hues 1463 - Roan |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Roan.jpg]] |
|Howard Hues 1465 - Chestnut |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Chestnut.jpg]] |
|Howard Hues 1467 - Bay |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Bay.jpg]] |
|Howard Hues 1469 - Light Bay |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Light Bay.jpg]] |
|Howard Hues 1534 - Polish Crimson |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Polish Crimson.jpg]] |
|Howard Hues 1544 - French Blue |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/French Blue.jpg]] |
|Howard Hues 1554 - Russian Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Russian Green.jpg]] |
|Howard Hues 1555 - Dragoon Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Dragoon Green.jpg]] |
|Howard Hues 1558 - French Artillery Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/French Artillery Green.jpg]] |
|Howard Hues 1562 - British Red |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/British Red.jpg]] |
|Howard Hues 1572 - Napoleonic Scarlet |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Napoleonic Scarlet.jpg]] |
|Howard Hues 1586 - Austrian Yellow Ochre |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Aus Yellow Ochre.jpg]] |
|Howard Hues 1613 - Rebel Gray |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Rebel Grey.jpg]] |
|Howard Hues 1644 - Union Blue |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Union Blue.jpg]] |
|Howard Hues 1647 - Pants Blue |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Pants Blue.jpg]] |
|Howard Hues 1676 - Rebel Butternut |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Rebel Butternut.jpg]] |
|Howard Hues 1703 - Belt White |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Belt White.jpg]] |
|Howard Hues 1713 - Field Grey |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Field Grey.jpg]] |
|Howard Hues 1715 - Italian Grey |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Italian Grey.jpg]] |
|Howard Hues 1716 - Battleship Grey |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Battleship Grey.jpg]] |
|Howard Hues 1717 - Charcoal Grey |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Charcoal Grey.jpg]] |
|Howard Hues 1719 - Panzer Grey |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Panzer Grey.jpg]] |
|Howard Hues 1720 - German Uniform |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/German Uniform.jpg]] |
|Howard Hues 1722 - Leather Black |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Leather Black.jpg]] |
|Howard Hues 1744 - Gun Bluing |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Gun Bluing.jpg]] |
|Howard Hues 1747 - UK Smoke Grey |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Uk Smoke Grey.jpg]] |
|Howard Hues 1752 - Tank Green |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Tank Green.jpg]] |
|Howard Hues 1754 - WWII Russian Uniform |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/WWII Russian Uniform.jpg]] |
|Howard Hues 1755 - Olive Drab |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Olive Drab.jpg]] |
|Howard Hues 1757 - Japanese Drab |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Japanese Drab.jpg]] |
|Howard Hues 1758 - Desert Khaki |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Desert Khaki.jpg]] |
|Howard Hues 1759 - Light Olive Drab |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Light Olive Drab.jpg]] |
|Howard Hues 1765 - Military Leather |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Military Leather.jpg]] |
|Howard Hues 1766 - British Uniform |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/British Uniform.jpg]] |
|Howard Hues 1767 - Camo Brown |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Camo Brown.jpg]] |
|Howard Hues 1768 - Camo Red Brown |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Camo Red Brown.jpg]] |
|Howard Hues 1769 - Rifle Butt |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Rifle Butt.jpg]] |
|Howard Hues 1785 - Colonial Khaki |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Colonial Khaki.jpg]] |
|Howard Hues 1786 - Khaki |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Khaki.jpg]] |
|Howard Hues 1787 - Afrika Sand |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Afrika Sand.jpg]] |
|Howard Hues 1788 - Khaki Drab |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Khaki Drab.jpg]] |
|Howard Hues 1794 - Desert Yellow |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Desert Yellow.jpg]] |
|Howard Hues 1797 - Italian Sand Yellow |[img height=50 width=100 [http://www.mondayknight.com/Howard Hues Paints/Italian Sand Yellow.jpg]] |
<svg class="em-icon harvey-ball ball-full" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" viewBox="0 0 128 128" role="img" aria-labelledby="title desc"><title id="title">{{$:/language/HarveyBalls/full/title}}</title><desc id="desc">{{$:/language/HarveyBalls/full/desc}}</desc><path d="M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64z"/></svg>
<svg class="em-icon harvey-ball ball-quarter-empty" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" viewBox="0 0 128 128" role="img" aria-labelledby="title desc"><title id="title">{{$:/language/HarveyBalls/quarter-empty/title}}</title><desc id="desc">{{$:/language/HarveyBalls/quarter-empty/desc}}</desc><path d="M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zM16 64c0 .19 48 0 48 0V16c-26.51 0-48 21.49-48 48z"/></svg>
<svg class="em-icon harvey-ball ball-empty" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" viewBox="0 0 128 128" role="img" aria-labelledby="title desc"><title id="title">{{$:/language/HarveyBalls/empty/title}}</title><desc id="desc">{{$:/language/HarveyBalls/empty/desc}}</desc><path d="M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z"/></svg>
<svg class="em-icon harvey-ball ball-quarter" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" viewBox="0 0 128 128" role="img" aria-labelledby="title desc"><title id="title">{{$:/language/HarveyBalls/quarter/title}}</title><desc id="desc">{{$:/language/HarveyBalls/quarter/desc}}</desc><path d="M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48 0-0-48 0-48 0s.25-48 0-48c-26.51 0-48 21.49-48 48s21.49 48 48 48z"/>
</svg>
<svg class="em-icon harvey-ball ball-half" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" viewBox="0 0 128 128" role="img" aria-labelledby="title desc"><title id="title">{{$:/language/HarveyBalls/half/title}}</title><desc id="desc">{{$:/language/HarveyBalls/half/desc}}</desc><path d="M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16V16c-26.51 0-48 21.49-48 48s21.49 48 48 48z"/></svg>
<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="HTTPSURLLINKHERE"></iframe>
[img[Imperial Apocalypse Class Battleship.image]]
[img[Imperial Armageddon Class Battlecruiser.image]]
;.stl Model
:Imperial Cargo Freighter.stl
;Source
:Imperial Dauntless Class Light Cruiser.stl

[img[Imperial Dauntless Class Light Cruiser.png]]
[img[Imperial Emperor Class Battleship.image]]

;1 Bn. Black Watch 
:(red hackle on the Foreign Service helmet)
:Blue over Khaki

;1 Bn. Berkshire Regiment
:Blue over Khaki

;2 Bn. Royal Irish Fusiliers 
:(Indian Khaki Service Dress)

;.stl Model
:Imperial Lunar Class Cruiser.stl

[img[Imperial Lunar Class Cruiser.image]]
[img[Imperial Mars Class Battlecruiser.image]]


[img[Imperial Oberon Class Battleship.image]]

[img[Imperial Tyrant Class Cruiser.image]]
[[✒|Incomplete]]

; [img[incomplete]] 
:<<list-links "[icon[incomplete]!sort[created]]">>
[img[Indian Army Khaki Drill Uniform.image.01]]


!! Painting Guide
;Skin
:[[Vallejo Model Color Brown Sand]]
;Uniform (all)
:[[Vallejo Model Color Khaki Grey]]
::[[Vallejo Model Color Beige]]
;Puttees
:[[Vallejo Model Color US Tan Earth]]
;Boots
:[[Vallejo Model Color Flat Earth]]
;Rifle
:[[Howard Hues Wood]]
;Forage Bag
:[[Vallejo Model Color Sky Grey]]
::[[Vallejo Model Color White]]
;Water Bottle
:[[Howard Hues Wood]]
::[[Vallejo Model Color Pale Sand]]
::[[Vallejo Model Color Dark Grey]]
:Leather Belts
::[[Vallejo Model Color Buff]]





I started painting the Indian army khaki drill uniform using the Khaki Gray from Vallejo at a one-to-one rate with a little bit of Future and water. This is what was recommended in the Mahdist Wars 1881 - 1885 which is also the guide that I use for all of my figures. 

I started off with a brown spray primer which I've been trying to use as in a full highlight with a lighter color. The truth is there's absolutely no reason not to just simply use the time I yet fine white primer spray for all of my figures. Using the white primer spray, I'll be able to use a wash of ink and or future wash colors to get the basic colors I want. This would be a similar effect to using the Citadel contrast paints.

I also tried the airbrush a few times, both with the Mahdists and with the Indians. I found at the airbrush really was not going to work very well unless you absolutely have water for your consistency in your paint. Even with the airbrush, I wasn't happy with the overspray splatter or any of the consistency in the painting. I found it when I was trying to paint the Indian khaki, I would get multiple Shades. The only Advantage so far that I have seen with the airbrush, is with smaller-scale models, in that lays down a very fine paint coat, we still have not interfered with the details on the model. Otherwise, a wash with a flat brush is going to give me similar if not better effects for anything larger than a 10 mm scale figures.

{{Chaos Infidel-class Raider}}
{{Imperial Inflexible-class Grand Cruiser}}

; Source
: Intel NUC 9 Extreme Kit (Ghost Canyon) BXNUC9i9QNX1 9th Generation Intel i9 CPU, Intel Wi-Fi 6 AX200, 2 x Thunderbolt 3, HDMI 2.0a, Barebone System

[img[image.Intel NUC 9 Extreme Kit (Ghost Canyon) BXNUC9i9QNX1]]

; System Notes
:Target Usage: Virtual Reality, Gaming, Creator (able to add a dedicated GPU via PCe add-in Card(s))
:9th Generation Intel Core i9-9980HK (NUC9i9QN) with Intel UHD Graphics, base Frequency 2.4 GHz, Max Turbo Frequency 5.00 GHz
:Max Memory Size (dependent on memory type) 64GB
:Max# memory bandwidth 42.6GB/s
:Intel Wi-Fi 6 AX200
:2 x Thunderbolt 3, HDMI 2.0a
:Supports Microsoft Windows
:Supports Intel Optane SSD and Intel Optane Memory M10 and H10 ready
:Chassis Dimensions: 238 x 216 x 96mm

|!General |
|Brand |Intel |
|Series |NUC |
|Model |BXNUC9i9QNX1 |
|CPU Supported |
|CPU Installed |Intel Core i9-9980HK Processor (16M Cache, up to 5.00 GHz) |
|Chipset |
|North Bridge |Mobile Intel CM246 Chipset |
|Memory Supported |
|Memory installed |No Memory |
|Memory slot |2 x 288Pin DIMM |
|Memory Type Supported |DDR4 2666 |
|Max Memory Supported |64GB |
|Dual Channel Memory Supported |Yes |
|Expansion Slots |
|PCI Express 3.0 x16 |1 |
|PCI Express |1 x PCIe x4 Gen 3 |
|Storage |
|Hard Drive Installed |No Hard Drive |
|Serial ATA |3 x SATA 6.0Gb/s |
|M.2 |2 x M.2 PCIe X4 slots (PCH), 1 x M.2 PCIe X4 slot (CPU) (NVMe) |
|Graphics |
|Onboard Video |Intel UHD Graphics 630 |
|Video Memory |Shared |
|Audio |
|Channel |7.1-CH |
|Communications |
|First LAN |i219-LM |
|Second LAN |i210-AT |
|Wireless LAN |Intel Wi-Fi 6 AX200 2.4Gbps, dual internal antennas |
|Bluetooth |Bluetooth v5 |
|Max LAN Speed |Dual 10/100/1000Mbps |
|Front Panel Ports |
|Front USB |2 x USB3.1 GEN2 Type-A |
|Card Reader |SDXC with UHS-II support |
|Back Panel Ports |
|HDMI |1 x HDMI |
|Thunderbolt 3  |2 |
|Rear USB |4 x USB3.1 GEN2 Type-A |
|RJ45 |2 |
|Physical SPEC |
|Support OS |Windows 10, 64-bit, Linux |
|Additional Information |
|Date First Available |September 25, 2020 |
{{Imperial Invincible-class Fast Battleship}}
{{Imperial Ironclad-class Battleship}}
!Fleet Commander

;0-1 Admiral

You may include one Eldar Admiral in your fleet, who must be assigned to a ship and will replace the vessel's Leadership with his own. If the fleet is worth over 750 points, an Admiral must be included to lead it.

|Eldar Admiral (Ld 9)  | 75 pts |
|Eldar Supreme Admiral (Ld 10) | 100 pts |

The Admiral may purchase a fleet commander re-roll, at the cost listed below.

|One re-roll | 25 pts |

You may include Farseers in your fleet, each of whom, must be assigned to a ship and gives their vessel a re-roll which may be used on the ship, another ship in the same squadron or an escort squadron within 15cm.

|0-3 Farseers | + 30pts |

Any capital ship in the fleet may be equipped with Aspect Warrior fighting crews at a cost of +20 pts per vessel.

|Aspect Warrior Fighting Crews | +20 pts |

!Capital Ships

!!Dragonships

Your fleet may include up to one Dragonship for every two Wraithships included in the fleet. If your fleet is led by an Admiral, you may include a single Dragonship as his flagship which does not count against this limitation.

|[[Eldar Dragonship Class]] | 260	pts |

!!Wraithships

Your fleet may include any number of Wraithships.

|[[Eldar Wraithship Class]] | 160	pts |

!!Ghostships

Any capital ship in the fleet may be upgraded to a Ghostship. Such a vessel may not also include a Farseer or Aspect Warrior crew.

|Ghostship | +free |

!Escorts

Your fleet may include any number of escorts.

|[[Eldar Shadowhunter Class Escort]] | 40	pts |
{{Necron Jackal-class Raider}}
{{Imperial Jericho-class Pilgrim Vessel}}

{{Imperial Jovian-class Battlecruiser}}
{{Tau Kass'l (Orca)-class Gunship}}
{{Tau Kass'l-class Gunship}}
* an outstanding actress in London.
* works with many suspicious characters intrigue plots.
* family killed by British troops - significant hatred for the British Government.
* Manipulating minor lords to manipulate main characters in the government.
[img[Kevin Dallimore.image]]

;Source
:http://www.werelords.com/pages/Kevins_page.htm

!!Painting Style

[img[Kevin Dallimore - Judge Dredd - 01.image]]
[img[Kevin Dallimore - Judge Dredd - 02.image]]
[img[Kevin Dallimore - Judge Dredd - 03.image]]
[img[Kevin Dallimore - Judge Dredd - 04.image]]
[img[Kevin Dallimore - Judge Dredd - 05.image]]
[img[Kevin Dallimore - Judge Dredd - 06.image]]
[img[Kevin Dallimore - Judge Dredd - 07.image]]
[img[Kevin Dallimore - Judge Dredd - 08.image]]
[img[Kevin Dallimore - Judge Dredd - 09.image]]
[img[Kevin Dallimore - Judge Dredd - 10.image]]
[img[Kevin Dallimore - Judge Dredd - 11.image]]
[img[Kevin Dallimore - Judge Dredd - 12.image]]
[img[Kevin Dallimore - Judge Dredd - 13.image]]
[img[Kevin Dallimore - Judge Dredd - 14.image]]
[img[Kevin Dallimore - Judge Dredd - 15.image]]
[img[Kevin Dallimore - Judge Dredd - 16.image]]
[img[Kevin Dallimore - Judge Dredd - 17.image]]
[img[Kevin Dallimore - Judge Dredd - 18.image]]
[img[Kevin Dallimore - Judge Dredd - 19.image]]
[img[Kevin Dallimore - Judge Dredd - 20.image]]
[img[Kevin Dallimore - Judge Dredd - 21.image]]
[img[Kevin Dallimore - Judge Dredd - 22.image]]
[img[Kevin Dallimore - Judge Dredd - 23.image]]
{{Necron Khopesh-class Light Cruiser}}
{{Tau Kir'la (Warden)-class Carrier Escort}}
{{Tau Kir'la-class Carrier Escort}}
{{Tau Kir'qath (Defender)-class Starship}}
{{Tau Kir'Qath-class Starship}}
{{Tau Kir'shasvre (Castellan)-class Heavy Escort}}
{{Tau Kir'shasvre-class Escort}}
{{Tyranid Kraken-class Frigate}}
{{bfg_Ship Template}}
{{Tau Lar'shi (Hero)-class Starship}}
{{Tau Lar'shi'vre (Protector)-class Cruiser}}
<html>
<h3>
Late War Turks
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-706100629606412915' itemprop='description articleBody'>
[img[https://4.bp.blogspot.com/_KHhbSM7vRPM/S218w4V9ejI/AAAAAAAAAXE/T_xlouo8CUs/s400/PICT0005.JPG]]<br /><br /><br /><div>Some GWM Late War German infantry figures painted up as Turkish Infantry for the later war period. They look very different when not painted in field grey.</div>
<div style='clear: both;'></div>
</div>
</html>
Ordinarily with TiddlyWiki, the full content of all tiddlers is embedded into the main HTML file. Lazy loading refers to the technique of only embedding metadata about the tiddler (in other words all fields except the ''text'' field), and requesting the body from the server when required.

Lazy loading can be used in two configurations:

* When running [[TiddlyWiki on Node.js]], just image tiddlers or all non-system tiddlers can be subject to lazy loading
* When running [[TiddlyWiki in the Sky for TiddlyWeb]], all tiddlers are subject to lazy loading

See the LazyLoadingMechanism for details of how lazy loading is implemented.

! Lazy loading under Node.js

To start TiddlyWiki with lazy loading for image tiddlers use this command:


```
tiddlywiki --server 8080 $:/core/save/lazy-images
```

To apply lazy loading to all non-system tiddlers use this command:


```
tiddlywiki --server 8080 $:/core/save/lazy-all
```

! Lazy loading under TiddlyWeb

With the current configuration, lazy loading is enabled by default.

The Sidebar on the right always seemed a little,hmmm, unnatural. There are plugins to have a left sidebar, of course, but who needs one more sidebar when we cannot even make full use of the existing sidebar? So I moved it to left. 

To move the sidebar to left, download the following json, drag and drop it to your TW.

<a href="Leftbar_Tiddlers.json" download="leftsidebar.json">Move Sidebar to left </a> 
* A french spymaster, but for who is unknown
* uses a stable of women to elicit secrets from government targets
* a great fencer
* very good at reading people and lying.
* financially secure with many assets and resources.
Les Bursley from Awesome Paint Job is an extremely talented painter who puts out fantastic YouTube videos that share his painting methods. A while ago he decided to share his wash recipe, and answered many questions about it in this thread at DakkaDakka.

Be advised that this wash is a bit of work to make and requires some expensive components, but just about everyone who has tried it has raved about it. (If you look at Les' models, it's awfully hard to argue with the results). And again, the amount of materials you'll be buying are enough to make a ridiculous amount of washes - if cost is a big concern, get a couple of buddies to throw in a few dollars apiece and none of you will have to buy washes for years.

To make these washes, you'll need:

* Matte medium
* Distilled water;
* Flow Aid:

**This should also be available where you bought the matte medium. Again, it's kind of pricey ($8 a bottle), but you'll use very little of it at a time.

*Acrylic waterproof drawing ink:

** These are not the inks sold by model paint manufacturers - they are inks specifically for drawing/calligraphy. They'll be in the craft store near the sketchbooks, pens, etc. Les states his preferred brand is Daler Rowney Acrylic Artist's Inks. My local store didn't have those in stock - you may have to order them online if you want that specific brand. 

**Some people seem to feel that using the Daler Rowney inks is essential, others report good results with other brands (see the forum thread for discussion about this). I recommend looking for the key words "artist's ink", "acrylic", and "waterproof" on the bottle - if it has all three of these covered, you're probably good to go. I chose Higgins Black Magic (I actually used to use this in art classes back in my college days) and Speedball Super Pigmented Acrylic calligrapher's ink.

**Warning** This stuff is several orders of magnitude more permanent than anything you've painted with before. If you spill this all over the carpet, or on your favorite shirt, or the cat, IT IS NEVER COMING OUT. You have been warned.

I also bought an assortment of empty plastic bottles & jars for this wash - since it's more of a pain to make, I make up a batch of the "stock" to keep around so I don't have to do it very often.

;To make the wash:
*10 parts - Distilled Water
*1 part - Flow Aid
*10 parts Matte Medium


* First, make up a 10:1 mix of distilled water & flow aid: To do this, I took a 2-ounce bottle and a ruler and marked off measurements:
**I filled the bottle 9/10ths of the way full with distilled water, then added 1/10th flow aid. I did this twice, and poured the mix into a larger 8-ounce bottle I had bought. I then filled the rest of the 8-ounce bottle with matte medium, for a 50/50 ratio of matte medium and water/flow-aid mixture:
**...this is your "wash stock".
*To make your desired wash, just fill your container with the wash stock and add the ink in the following ratios:

**"Heavy" black wash: 60 drops black ink per ounce of stock
**"Soft" black wash: 20 drops black ink per ounce of stock
**Colors: 40 drops ink per ounce of stock

I currently use more black wash than any other color, so I made a large batch. I added my stock to a 2oz. plastic jar:
*...then I added the ink:
*(In hindsight, I do not recommend using this type of jar for the washes - when you shake the jar to mix the wash before using, the wash gets into the threads of the jar, then the matte medium dries and gums up the threads. Lesson learned).

For the green, I just used an empty Citadel pot that I had on hand:



Obviously "drops of ink" is not going to be a consistent measurement when you're dealing with different manufacturer's inks, bottle droppers, etc., so you'll want to play around with these to get the color you want. You can also add more matte medium if you want the consistency of the wash to be thicker, or more water if you want it to be thinner.


[img[Lichen Trees.01.jpg]]
[img[Lichen Trees.02.jpg]]
[img[Lichen Trees.03.jpg]]
[img[Lichen Trees.04.jpg]]
[img[Lichen Trees.05.jpg]]
[img[Lichen Trees.06.jpg]]
[img[Lichen Trees.07.jpg]]
[img[Lichen Trees.08.jpg]]
[img[Lichen Trees.09.jpg]]

As a gamemaster there are often times when your hardy adventurers are in desperate need of money or information. Although you may wish to afford them access to the knowledge and resources they need, many sce-nario designs do not allow for governmental involvement and “Deus ex machina” never sits quite right. It is precisely for these occasions that an independent agency such as The Tyler Foundation and its subsidiaries can function as the perfect liaison between a gamemaster and his players. Lionel Tyler is young, impetuous, devoted, patriotic, and enterprising. It is hard to imagine a venture that could not procure Tyler’s involvement. Although rash and overly excitable, Tyler has a brilliant business mind and will gain assur-ances as to his share of the profits before proceeding.

BACKGROUND

Lionel Tyler was born in Boston with a silver spoon in his mouth and a railroad spike in his hand. His parents—a mongrel immigrant turned self-made millionaire railroad tycoon and a proper Bostonian who traced her family lineage to English royalty—lavished him with everything a lad could desire. His father saw in him the heir to his expanding financial empire, while his mother’s dreams ran to politics and the presidency. It was not long, however, before Lionel had outpaced their dreams. At age three he was well versed in the three R’s; he entered high school at age eight; gradu-ated from Harvard prior to his twelfth birthday; then went on to Cambridge where, at age 14, he matriculated magna cum laude. Much to the chagrin of this parents, however, neither politics nor business captured his imagina-tion. Rather he was drawn to the mysterious and the unknown and took his degrees in Archaeology and Structural Engineering.

After nearly three years of dabbling in a variety of earthbound endeav-ors, Lionel grew bored... the doors were always open, the roads always paved, and he could not escape his parent’s shadow. On March 11, 1889, at age 18, Tyler first set foot on Martian soil with one month’s allowance (£1200) and his faithful bodyguard Ironhead. Within the month he had become an integral part of a team which not only defeated the an unnamed European power in an encounter, but also uncovered the greatest archaeological find in recent Martian history—the Burial Tomb of Seldon XXXVII. His career skyrocketed from there. In quick succession Tyler led teams on excavations of an ancient Martian temple (circa 141 BC) and of a partially-operational pumping station deep beneath a mountain in the Shastapsh Range. Tyler invested the monies he garnered from these projects (substantial payments from several Earth governments for services and goods received are ru-mored to be part of his compensation). With funds from his lucrative invest-ments, Tyler built his foundation and its subsidiaries. Each subsidiary orga-nization has its own unique goals and agendas; and each, too, must stand on its own financial feet.

MOTIVATIONS

“There is no difficulty that can not be overcome by a quick wit, a good book, and a suitable application of high explo-sives.” — Lionel B. Tyler

Uncovering the mysteries of the Red Planet is the primary motivator of Tyler and his many corporate arms. Any venture which delves into Mars’ past is irresistible to him. He will insist that in return for the research infor-mation and resources he expends that, in addition to his fair share of booty, he receives the right to study and exhibit all artifacts recovered. The second-ary goal of The Tyler Foundation and its subsidiaries is the expansion of Tyler’s financial empire. Tyler firmly believes that the achievement of his primary goal is limited only by the size of the resource pool from which he can draw. To this end, he will invest in endeavors which he feel will be potentially profitable, even if the profits accumulate only over a long period of time. Finally, Tyler is a American patriot. He will support any effort to solidify the American presence on Mars and will comply with all reasonable requests by the American government for aid.

Lionel Tyler, Tyler Foundation (Archaeologist, Engineer, Investor) Strength: 1 Intellect: 7 Agility: 2 Charisma: 4 Endurance: 3 Social Level: 6
Skills: Stealth 2, Foraging 2, Mountaineering 3, Mapping 2, Observation 6, Structural Engineering 4, Explosives 5, Naval Architecture 2, Earthworks 3, Physics 3, Chemis-try 3, Biology 3, Geology 4, Archaeology 6, Eloquence 4, Bargaining 3, Linguistics 5 (German 2, Parhooni 3, Songaaryani 4, Koline 3, Khallane 3), Riding 5 (Horse 5, Camel 2, Elephant 3, Gashant 4, Ruumet Breehr 2), Piloting 1 (Sailing Vessel), Lead-ership 2, Medicine 1.

Note: Tyler is a very experienced adventurer, and his skills reflect this. Although his Intellect is given as 7 (a score not normally possible in the Space: 1889 system), this score applies only to projects where he has time to think and study. Under stress Tyler will often do rather stupid things, explaining later that “It seemed like a good idea at the time.”

Jake “Ironhead” Nagurski,  (Mechanic, Foreman, Bodyguard) Strength: 5 Intellect: 1 Agility: 4 Charisma: 3 Endurance: 6 Social Level : 2
Skills: Fisticuffs 5, Throwing 2, Close Combat 6 (Bashing Weapons), Stealth 3, Marks-manship 3 (Pistol 3, Rifle 3), Mechanics 4 (Steam 4, Machinist 3), Mapping 4, Forag-ing 2, Observation 3, Explosives 2, Bargaining 2, Riding (Horse 4, Gashant 2), Lead-ership 2, Medicine 2.

Note: Jake is a burly, work-hardened, ex-railroad gang foreman and mechanic. Just after Lionel’s birth, his father chose Jake to act as the young boy’s companion and bodyguard. Since that day, the two have been virtually inseparable. Nicknamed “Ironhead” by Tyler for his ability to take punishment as well as dish it out, Jake keeps in shape by carrying Tyler’s copious personal library wherever they wander. A likeable chap with a broad smile, Jake is pleasant company though he is overprotec-tive of the young Tyler.

ENCOUNTER IDEAS

As noted previously, virtually any adventure design can utilize The Tyler Foundation. Adventurers can bring unidentifiable or mysterious items, in-scriptions, and rituals to Tyler for explanation and/or for profit. The Tyler Free Martian Library contains a copy of every available text published about Mars or written by a Martian, including maps and other reference materials.
Tyler also maintains a private collection of rare and one-of-a-kind Martian tomes, many of which he is only now beginning the process of translating.
Tyler himself cannot resist an excavation and will accompany any rea-sonable venture proposed. His favorite projects involve ancient Martian sci-entific sites, but any dig will pique his interest. Tyler espouses the theory that, since Martians have eight digits on their hands, the ancient Martian culture revolved around the number eight and that their mathematics sys-tem used base eight. Tyler is fond of citing the facts that ancient sites are often circular containing eight spokes and that all distances are in multiples of eight. Thus, the smallest find can lead to a significant discovery if this theory is properly applied by archeologists.
Tyler’s personal idiosyncrasies and pet projects can also be used to draw him into an adventure. Among his projects is the development of a Martian railway system. Considering his background, Tyler knows the enor-mous profits which can be generated by successfully linking the various areas on Mars. Since much of the Martian landscape is still unknown to Earthmen, Tyler is eager to be represented on expeditions to previously unexplored territories on the off chance he can procure future rail rights.
Tyler is also preoccupied with liftwood which he finds entirely fascinating and grossly underdeveloped as a resource. Tyler believes there is potential profit in the cultivation of liftwood. Expeditions to liftwood forests, evidence of subspecies, or the possible discovery of alternative uses of liftwood all will intrigue him.
Finally, Tyler is an explosives expert. Although he never carries hand weapons, Tyler always travels with several cases of dynamite. He appears to experience intense carnal enjoyment from witnessing explosions. Projects calling for the use of explosives will likewise entice him.
* Fragile, handsome man, who has added weight from a succulant lifestyle.
* Extremely intelligence
* A power behind the throne.
* Holds no portfolio, but has the ability to have most investigations, and plans, directed to him, or through him, on behalf of the Crown.
{{Imperial Lunar-class Heavy Assault Cruiser}}
;Source
:https://www.patreon.com/madox_historicalminis
{{Imperial Maelstrom-class Galleass of War}}
Buy a bottle of "FUTURE acrylic floor finish for non-wax and regular floors" by Johnson & Son. In the U.S. it comes in big 800 ml (27 ounce) clear plastic squeeze bottles for about $7, and was available in both supermarkets I checked. This is more than I can probably use in a lifetime. The clear liquid inside is slightly more viscous than water. I imagine there are similar products in other countries, and I recommend that we identify them.

Pre-mix some of the FUTURE, one part of acrylic finish to four parts of water. This is the Magic Wash stock. I made mine up in a liter sealable milk bottle. Making a clear stock up ahead of time allows the small bubbles which can result when mixed with water to subside over time.

Devote one brush to be the Magic Wash brush. I don't know if this is really necessary, but it seems safer to me, since the formula of the FUTURE finish is different from those of our acrylic paints.

When you are ready to use it, mix a little of the Magic Wash stock with a small amount of your chosen pigment. Stir it with your brush, don't shake it. I have successfully used inks and acrylic paints as pigments.

Brush over your figures and allow to dry. It dries just about as quickly as acrylic paints.

It sucks the pigment right down into the crevasses and keeps it there. Doesn't let it "osmosis" back up. And the high areas remain remarkably clear ! I have used black, dark brown, and light tan (for white marble).

And Magic Wash even gives a hard protective coating !! It's not too shiny, but a final coat of dullcote often makes the figures look better to my eye.

What DON'T I like about it? Well, I've mentioned the little bubbles, with a method for avoiding them. The only other "problem" is that, if you tend to lick your brush while painting, the stuff tastes TERRIBLE !! So I have given up that habit when using Magic Wash.

---

Look to this and see about adding a drop of flow improver.
I am going to look at making a deck of cards to recreate the Mahdist Reaction table for playing Sands of Sudan game.

//Example card//

---

;Base
{{Vallejo 70.976}}

;Wash

?Something darker than Buff

;Highlight
{{Vallejo 70.837}}
<div style="clear: both;"></div><<image-left "Mahdist Wash.02.20200929" caption:"Mahdist Wash"  width:"400px">>
Again using the [[Agrax Earthshade]] on the base coloured models. A good 80% solution.

<div style="clear: both;"></div><<image-left "Mahdist Wash.01.20200929" caption:"Mahdist Wash"  width:"400px">>



<div style="clear: both;">

---
{{Imperial Majestic-class Battleship}}
<a href="//2.bp.blogspot.com/_g7WecZEyDf4/TQLcAwznZWI/AAAAAAAAAFA/aR3rhYcOEBE/s1600/Leaves-02.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://2.bp.blogspot.com/_g7WecZEyDf4/TQLcAwznZWI/AAAAAAAAAFA/aR3rhYcOEBE/s400/Leaves-02.JPG" width="400" /></a>
<span style="font-size: large;"><strong>Step 1: Loot Tea Bags</strong></span><br />
I looted 10 tea bags from my fiance's stash. I then emptied their contents into a mixing bowl.<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="//3.bp.blogspot.com/_g7WecZEyDf4/TQLcJpih5VI/AAAAAAAAAFE/5l1QsK1ymxY/s1600/Leaves-03.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://3.bp.blogspot.com/_g7WecZEyDf4/TQLcJpih5VI/AAAAAAAAAFE/5l1QsK1ymxY/s400/Leaves-03.JPG" width="400" /></a><span style="font-size: large;"><strong>Step 2: Add Water</strong></span></div>
Next add enough water to make it a mucky muddy paste. The reason behind this critical step is so that you can actually paint the ground tea. Otherwise it will just blow away the second you turn the airbrush on it! <br />
<a href="//4.bp.blogspot.com/_g7WecZEyDf4/TQLcSkpdxoI/AAAAAAAAAFI/dnxW1behPng/s1600/Leaves-04.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://4.bp.blogspot.com/_g7WecZEyDf4/TQLcSkpdxoI/AAAAAAAAAFI/dnxW1behPng/s400/Leaves-04.JPG" width="400" /></a><br />
<span style="font-size: large;"><strong>Step 3: Spread&nbsp;</strong></span><br />
Then take the paste and spread it out in plastic container. I spread it out in a layer about 1/8" (3-4mm) thick. <br />
<br />
Any thinner and you risk having it get blown away in the next step. <br />
<br />
Too thick and you'll lose your color when&nbsp;the tea&nbsp;dries and you mix it together.<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="//2.bp.blogspot.com/_g7WecZEyDf4/TQLcbd_MvGI/AAAAAAAAAFM/VPgrURJrQUk/s1600/Leaves-05.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://2.bp.blogspot.com/_g7WecZEyDf4/TQLcbd_MvGI/AAAAAAAAAFM/VPgrURJrQUk/s400/Leaves-05.JPG" width="400" /></a><strong><span style="font-size: large;">Step 4: Painting Orange</span></strong></div>
The next step is to paint the tray in the colors you want. Here I've pained one tray in Tamyia Orange.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="//1.bp.blogspot.com/_g7WecZEyDf4/TQLckj3_wuI/AAAAAAAAAFQ/nG_7lRiEDMk/s1600/Leaves-06.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://1.bp.blogspot.com/_g7WecZEyDf4/TQLckj3_wuI/AAAAAAAAAFQ/nG_7lRiEDMk/s400/Leaves-06.JPG" width="400" /></a><strong><span style="font-size: large;">Step 5: Painting Yellow</span></strong></div>
Then I painted the second tray in Tamyia Yellow.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<a href="//3.bp.blogspot.com/_g7WecZEyDf4/TQLd571r0ZI/AAAAAAAAAFY/vyinvLnsS5g/s1600/Leaves-07.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://3.bp.blogspot.com/_g7WecZEyDf4/TQLd571r0ZI/AAAAAAAAAFY/vyinvLnsS5g/s400/Leaves-07.JPG" width="400" /></a><strong><span style="font-size: large;">Step 6: Drying</span></strong><br />
Once I painted the trays I placed them outside in direct sunlight for a few hours. I'm sure that you can do the same under a heat lamp or something similar.<br />
<br />
The stones were added to make sure the tray didn't blow away. That's all.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="//4.bp.blogspot.com/_g7WecZEyDf4/TQLeDaJROiI/AAAAAAAAAFc/pdEsfQglPDE/s1600/Leaves-08.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://4.bp.blogspot.com/_g7WecZEyDf4/TQLeDaJROiI/AAAAAAAAAFc/pdEsfQglPDE/s400/Leaves-08.JPG" width="400" /></a><strong><span style="font-size: large;">Step 7: Mixing</span></strong></div>
After a few hours of chores and making a sandwich for lunch, I tested the yellow tray and it was dried out.&nbsp;The tea under the paint remained brown, which is good as it was the third colour I wanted in the mix. <br />
<br />
Then I mixed up both trays together into one glorious pile.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="//4.bp.blogspot.com/_g7WecZEyDf4/TQLeMbGljdI/AAAAAAAAAFg/5eGGhx0ClgM/s1600/Leaves-09.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="300" n4="true" src="https://4.bp.blogspot.com/_g7WecZEyDf4/TQLeMbGljdI/AAAAAAAAAFg/5eGGhx0ClgM/s400/Leaves-09.JPG" width="400" /></a><strong><span style="font-size: large;">Step 8: Storage</span></strong></div>
I had a few empty plastic containers so I conscripted one&nbsp;for my leaf mix. As you can see there are three tones. <br />
<br />
I think there was a bit too much brown, indicating that I should have probably paid more attention to the thickness of my trays, but I'm still happy with the result.<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="//3.bp.blogspot.com/_g7WecZEyDf4/TQLeVURXlwI/AAAAAAAAAFk/2CCNC_hdBgs/s1600/Leaves-10.JPG" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="300" n4="true" src="https://3.bp.blogspot.com/_g7WecZEyDf4/TQLeVURXlwI/AAAAAAAAAFk/2CCNC_hdBgs/s400/Leaves-10.JPG" width="400" /></a><strong><span style="font-size: large;">Step 9: Testing</span></strong></div>
The final step was to test it out. I had prepared a stick with some basing done so I could test the mix. I was right in that the mix was&nbsp;a little dark, but I ended up detailing some of the leaves with Vallejo paints to bring out the color and add some variety in the autumn shades. <br />
<br />
I am happy enough with the result that I'll be employing it forthwith... however I've totally missed the painting comp's deadline which inspired this in the first place. No worries, I've got something&nbsp;for leaves now!<br />
<br />
As the final lyric of Yes' "Leave It" would have it: "One down one to go, another town and one more show!"
</div>
Markdown: Basics
================

Getting the Gist of Markdown's Formatting Syntax
------------------------------------------------

This page offers a brief overview of what it's like to use Markdown.
The [syntax page] [s] provides complete, detailed documentation for
every feature, but Markdown should be very easy to pick up simply by
looking at a few examples of it in action. The examples on this page
are written in a before/after style, showing example syntax and the
HTML output produced by Markdown.

It's also helpful to simply try Markdown out; the [Dingus] [d] is a
web application that allows you type your own Markdown-formatted text
and translate it to XHTML.

**Note:** This document is itself written using Markdown; you
can see the source for it by editing this tiddler.

  [s]: https://daringfireball.net/projects/markdown/syntax  "Markdown Syntax"
  [d]: https://daringfireball.net/projects/markdown/dingus  "Markdown Dingus"


## Paragraphs, Headers, Blockquotes ##

A paragraph is simply one or more consecutive lines of text, separated
by one or more blank lines. (A blank line is any line that looks like
a blank line -- a line containing nothing but spaces or tabs is
considered blank.) Normal paragraphs should not be indented with
spaces or tabs.

Markdown offers two styles of headers: *Setext* and *atx*.
Setext-style headers for `<h1>` and `<h2>` are created by
"underlining" with equal signs (`=`) and hyphens (`-`), respectively.
To create an atx-style header, you put 1-6 hash marks (`#`) at the
beginning of the line -- the number of hashes equals the resulting
HTML header level.

Blockquotes are indicated using email-style '`>`' angle brackets.

Markdown:

    A First Level Header
    ====================

    A Second Level Header
    ---------------------

    Now is the time for all good men to come to
    the aid of their country. This is just a
    regular paragraph.

    The quick brown fox jumped over the lazy
    dog's back.

    ### Header 3

    > This is a blockquote.
    >
    > This is the second paragraph in the blockquote.
    >
    > ## This is an H2 in a blockquote


Output:

    <h1>A First Level Header</h1>

    <h2>A Second Level Header</h2>

    <p>Now is the time for all good men to come to
    the aid of their country. This is just a
    regular paragraph.</p>

    <p>The quick brown fox jumped over the lazy
    dog's back.</p>

    <h3>Header 3</h3>

    <blockquote>
        <p>This is a blockquote.</p>

        <p>This is the second paragraph in the blockquote.</p>

        <h2>This is an H2 in a blockquote</h2>
    </blockquote>



### Phrase Emphasis ###

Markdown uses asterisks and underscores to indicate spans of emphasis.

Markdown:

    Some of these words *are emphasized*.
    Some of these words _are emphasized also_.

    Use two asterisks for **strong emphasis**.
    Or, if you prefer, __use two underscores instead__.

Output:

    <p>Some of these words <em>are emphasized</em>.
    Some of these words <em>are emphasized also</em>.</p>

    <p>Use two asterisks for <strong>strong emphasis</strong>.
    Or, if you prefer, <strong>use two underscores instead</strong>.</p>



## Lists ##

Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`,
`+`, and `-`) as list markers. These three markers are
interchangable; this:

    *   Candy.
    *   Gum.
    *   Booze.

this:

    +   Candy.
    +   Gum.
    +   Booze.

and this:

    -   Candy.
    -   Gum.
    -   Booze.

all produce the same output:

    <ul>
    <li>Candy.</li>
    <li>Gum.</li>
    <li>Booze.</li>
    </ul>

Ordered (numbered) lists use regular numbers, followed by periods, as
list markers:

    1.  Red
    2.  Green
    3.  Blue

Output:

    <ol>
    <li>Red</li>
    <li>Green</li>
    <li>Blue</li>
    </ol>

If you put blank lines between items, you'll get `<p>` tags for the
list item text. You can create multi-paragraph list items by indenting
the paragraphs by 4 spaces or 1 tab:

    *   A list item.

        With multiple paragraphs.

    *   Another item in the list.

Output:

    <ul>
    <li><p>A list item.</p>
    <p>With multiple paragraphs.</p></li>
    <li><p>Another item in the list.</p></li>
    </ul>



### Links ###

Markdown supports two styles for creating links: *inline* and
*reference*. With both styles, you use square brackets to delimit the
text you want to turn into a link.

Inline-style links use parentheses immediately after the link text.
For example:

    This is an [example link](http://example.com/).

Output:

    <p>This is an <a href="http://example.com/">
    example link</a>.</p>

Optionally, you may include a title attribute in the parentheses:

    This is an [example link](http://example.com/ "With a Title").

Output:

    <p>This is an <a href="http://example.com/" title="With a Title">
    example link</a>.</p>

Reference-style links allow you to refer to your links by names, which
you define elsewhere in your document:

    I get 10 times more traffic from [Google][1] than from
    [Yahoo][2] or [MSN][3].

    [1]: http://google.com/        "Google"
    [2]: http://search.yahoo.com/  "Yahoo Search"
    [3]: http://search.msn.com/    "MSN Search"

Output:

    <p>I get 10 times more traffic from <a href="http://google.com/"
    title="Google">Google</a> than from <a href="http://search.yahoo.com/"
    title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
    title="MSN Search">MSN</a>.</p>

The title attribute is optional. Link names may contain letters,
numbers and spaces, but are *not* case sensitive:

    I start my morning with a cup of coffee and
    [The New York Times][NY Times].

    [ny times]: http://www.nytimes.com/

Output:

    <p>I start my morning with a cup of coffee and
    <a href="http://www.nytimes.com/">The New York Times</a>.</p>


### Images ###

Image syntax is very much like link syntax.

Inline (titles are optional):

    ![alt text](/path/to/img.jpg "Title")

Reference-style:

    ![alt text][id]

    [id]: /path/to/img.jpg "Title"

Both of the above examples produce the same output:

    <img src="/path/to/img.jpg" alt="alt text" title="Title" />



### Code ###

In a regular paragraph, you can create code span by wrapping text in
backtick quotes. Any ampersands (`&`) and angle brackets (`<` or
`>`) will automatically be translated into HTML entities. This makes
it easy to use Markdown to write about HTML example code:

    I strongly recommend against using any `<blink>` tags.

    I wish SmartyPants used named entities like `&mdash;`
    instead of decimal-encoded entites like `&#8212;`.

Output:

    <p>I strongly recommend against using any
    <code>&lt;blink&gt;</code> tags.</p>

    <p>I wish SmartyPants used named entities like
    <code>&amp;mdash;</code> instead of decimal-encoded
    entites like <code>&amp;#8212;</code>.</p>


To specify an entire block of pre-formatted code, indent every line of
the block by 4 spaces or 1 tab. Just like with code spans, `&`, `<`,
and `>` characters will be escaped automatically.

Markdown:

    If you want your page to validate under XHTML 1.0 Strict,
    you've got to put paragraph tags in your blockquotes:

        <blockquote>
            <p>For example.</p>
        </blockquote>

Output:

    <p>If you want your page to validate under XHTML 1.0 Strict,
    you've got to put paragraph tags in your blockquotes:</p>

    <pre><code>&lt;blockquote&gt;
        &lt;p&gt;For example.&lt;/p&gt;
    &lt;/blockquote&gt;
    </code></pre>
{{Imperial Mars-class Battlecruiser}}
I have tried the Mean Streets printed at 95% with 3d printed 5mm walls. It works, but it is very cumbersome and honestly not really worth the effort. It feels like I am reinventing the wheel instead of just doing something to complete the task.

When I tried the same with 100%, it will not work on my printer due to the size of the print bed.

Then I thought about trying it .svg wood cutting, but at this point I might as well just use the damn foamboard that it was designed for.,















































;Priming
:Tamiya Fine Surface Primer - White

;Base Colours
{{Vallejo 70.984}}

;Wash
:Nuln Oil + Agrax Earthshade + Future Wash

;Highlight
{{Vallejo 70.846}}


;Detail

{{Imperial Merchant-class Escort Carrier}}
{{Imperial Mercury-class Battlecruiser}}
{{Imperial Meritech Shrike-class Raider}}

;Paulding Location
:148 Bill Carruth Parkway Suite 280
:Hiram, Georgia 30141
:678-363-3343
:Mon-Fri: 8:00 a.m.-5:00 p.m.
:[[https://metroderm.org/locations/paulding-west-cobb-office/]]

;Dr Hansen

;Appointments
:22 Dec 2020 0815
;Links
:https://newatlas.com/wv850-atv-airless-tires/29809/
:https://www.argoadventure.com/2020-ARGO-AURORA-850-SX-8X8-STK-44105_p_15158.html
:https://military.polaris.com/en-us/mrzr/
:https://military.polaris.com/en-us/sportsman-mv-850/
:https://spatialillusions.com/unitgenerator/

;Color Basics
:German - PANTONE 277 - rgb(171, 202, 233)
:British - PANTONE 155 - 238, 214, 165
:U.S. - PANTONE 390 - C:18.5 M:0 Y:100 K:6
:Russian - PANTONE 124 - C:0 M:27.5 Y:100 K:6
:Italian - PANTONE Cool Gray 6 - C:0 M:0 Y:0 K:38
:Allied Minor - PANTONE 351 - C:15 M:0 Y:15 K:0
:Axis Minor - PANTONE 361 - C:76 M:0 Y:91 K:0
:Japanese - PANTONE 115 - C:0 M:8.5 Y:79 K:0
:French - PANTONE 297 - 114, 199, 231
<$transclude tiddler={{!!icon}}/>


|!Armour | {{!!armour}} |
|!Capacity | {{!!capacity}} |
|!Defence | {{!!defence}} |
|!Health | {{!!health}} |
|!Ratings | {{!!ratings}} |
;Special Effects
:{{!!special_effects}}
[img[Miniature Painting.image]]


Miniature Painting only requires the following steps:

;Priming

;Base Colours

;Highlight

;Wash

;Detail


---


The only other type of painting is to use the Wargames Foundry triad paints.

So far, I have had success with using the Shade as base color. Then use a wetbrush to add the base color. After that, a dry brush or defined highlights with the light shade of the same colour.

Anything else is a waste of time, to include:

;[[Les' Wash Recipe]]

So far the only alternative I can think of is to try the Triad style of Kevin Dallimore.

;Priming
;Wash on Shade Color
;Brush on Base Color
;Highlight with Light Color


;Basing
:For figures that will be multibased, I will use the 20mm square magnet.
:I have tried with the round bases, but to make the multibased stands, the square will fit neatly on a metal base.
::For skirmish figures, I will use the 3d printer to make metal base covers with pre-cut squares to fit the square based skirmishers.
::This will allow me to still use single figures in Saga, or other similar games.
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Miniatures:Manufacturer]]
<<multilevel-toc-expandable tag:"Miniatures:Manufacturer" stateTiddler:"state_Miniatures:Manufacturer">>
;Source
:https://modernspearhead.wordpress.com/
[img[Monster Fight Club.image.01]]
[img[Monster Fight Club.image.02]]

;ToDo
:Look to see if you can get these foliage sections in 3D stl files.
{{Imperial Mortis Rex-class Battleship}}
;Moto X Phone
: Look for an OS that I can replace to make the phone take the newest Android One OS.

;Source
:https://theupgradeguide.com/install-android-10-on-motorola-moto-x4-lineageos-17-1-how-to-guide/
I have tried a number of different ways to mount Battlefleet Gothic ship models.

!!Current plan

;Drill a small shaft (3mm) in the ship model.
:Snip a #9 nail with a thick or wide nail head.
:Insert the snipped nail into the shaft with glue so the nail head is flush to the base. It is important that the nail head is parallel to the ship model, otherwise the ship model will be canted when place on the flight post.
:Use a 6mm x 3mm magnet glued to the end of the flight post.
:In order to make sure the flight post and magnet are perpendicular, use the wooden clothes pin to hold the flight post vertical and place the clothes pin on a circle jig to push the flight post down onto the magnet.



!!What doesn't work

;3mm x 6mm shaft in model to fit flight post into.
:The shaft in the 3D model does not always model as a 3mm wide shaft. 
:When I try to drill the hole to fit the flight post, it causes the ship model to crack and break off pieces.

;Gluing a round ball to the base of the ship model.
:The ball is too large on small models. 
:On large models the ball mount will not hold the model in place.
:The ball also is hard to fit on the model.
;A more powerful, more capable Lithium-Ion chainsaw – ideal for noise restricted areas. 

[img[MSA 200 C-B.image]]

Stihl is the only chainsaw manufacturer that makes its own chain, and it designed this one specifically for pruning, to give a smooth cut and to reduce tearing. The rest of the saw was designed from there, it appears, pretty much front to back: a small bar with a narrow nose for good access, a slim saw body, and a small but surprisingly capable motor. It took us only a couple of cuts to see those benefits. The saw proved to be a beautiful power tool with outstanding cut quality, for the sake of pruning, but its overall efficiency also enabled it to be an outstanding crosscutter. It zipped through one cookie after another, cranking them out like a wood disc machine. We like the saw’s light weight, its lack of vibration, and its tool-free chain adjustment. Yes, the saw is expensive, but it’s every bit a Stihl saw. 
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]

<<multilevel-toc-expandable tag:"ENTERTAGHERE" stateTiddler:"state_TAGNAMEHERE">>
{{Chaos Murder-class Cruiser}}




















































And now onto the summer projects. Guns, Hussars and other bits and pieces.









{{Eldar Naiad-class Cruiser}}
[img height=30 [NATO - Armor Light - Division.image]]
[img height=30 [NATO - Artillery - Regiment.image]]
<$list filter="[tag[NATO Symbol]]">
<h2>{{!!icon}} <$link><$transclude field="title"/></$link></h2>
<$transclude mode="block"/>
</$list>
{{bfg_Ship Template}}
{{bfg_Ship Template}}
!MIND OF THE MACHINE

Necron fleets, just like their armies, are composed of a horrifying array of unthinking machines intent only on fulfilling their C'tan master's ancient plans of conquest. Because of this, Necron fleets have no Fleet Commander in the conventional sense, which affects their fleet in the following ways:

!!Leadership

Leadership is determined normally for Necron fleets, except a ship carrying a Sepulchre (see below) automatically receives a Leadership of 10.

!!Re-rolls

A Necron fleet may purchase re-rolls, but they are purchased by the fleet as a whole, rather than being considered Fleet Commander rerolls. The fleet gets one re-roll and can purchase extra re-rolls at the cost shown.

|One extra re-roll  | 25 pts |
|Two extra re-rolls | 75 pts |

!Capital Ships

!!Tombships

Your fleet may include up to one tombship for every Scythe class harvest ship it contains.

|Cairn class tombship | 500	pts |

;0-1 Sepulchre

A single tombship may be upgraded to carry a Sepulchre. Note that there is no requirement for a Necron fleet to include a Sepulchre and it is actually quite normal for them to consist of Scythes supported by Jackals.

|Sepulchre  | 50	pts |

!!Cruisers

Your fleet may include up to six Scythe class harvest ships and up to three Shroud Class Light Cruisers.

|0-6 Scythe class harvest ship  | 275	pts |
|0-3 Shroud Class Light Cruiser  | 155	pts |

!Escorts

!!Raiders

Your fleet may include up to twelve Jackal class raiders, and up to twelve Dirge class raiders.

|0-12 Jackal class raiders | 50	pts |
|0-12 Dirge class raiders | 40	pts |
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{Imperial Nemesis-class Fleet Carrier}}
;Fitting
```
[Porpoise, Neptune P]
Inertial Stabilizers II
Inertial Stabilizers II

Multispectrum Shield Hardener II
Medium Shield Extender II
1MN Y-S8 Compact Afterburner
Burst Jammer II

Shield Command Burst II
Large Ancillary Remote Shield Booster
Improved Cloaking Device II
Small Tractor Beam I

Medium Drone Mining Augmentor II
Medium Drone Mining Augmentor II
Medium Core Defense Field Extender II



Hobgoblin II x5
Garde II x2
Salvage Drone I x5
'Augmented' Mining Drone x5

Active Shielding Charge x2300

```

:Skills required
```
Afterburner 1
CPU Management 4
Cloaking 3
Drone Interfacing 4
Drone Sharpshooting 4
Drones 5
Electronic Warfare 4
Gallente Drone Specialization 1
Hull Upgrades 2
Industrial Command Ships 1
Leadership 5
Light Drone Operation 5
Mechanics 3
Mining 4
Mining Director 1
Mining Drone Operation 5
Mining Drone Specialization 1
Mining Foreman 5
Navigation 1
ORE Industrial 3
Power Grid Management 3
Salvage Drone Operation 1
Salvaging 2
Science 3
Sentry Drone Interfacing 5
Shield Command 5
Shield Command Specialist 1
Shield Emission Systems 1
Shield Upgrades 4
Spaceship Command 5
Survey 3
Tactical Shield Manipulation 4

```
;Subscription
:One year
:2 Licenses
:~$29
{{bfg_Ship Template}}
{{Eldar Nightshade-class Destroyer}}
<$macrocall
	$name="toc-tabbed-external-nav"
	tag="Notebook"
	selectedTiddler="$:/temp/toc/selectedTiddler"
	unselectedText="<p>Select a topic in the table of contents. Click the arrow to expand a topic.</p>"
	missingText="<p>Missing tiddler.</p>"
/>


;icon.notstarted
:{{icon.notstarted}}

;icon.started
:{{icon.started}}

;icon.working
:{{icon.working}}

;icon.finish
:{{icon.finish}}

;icon.completed
:{{icon.completed}}

Notifications are small informational messages that appear at the top right of the TiddlyWiki window, and automatically disappear after a preset time.

<$button message="tm-notify" param="SampleNotification">Display sample notification</$button>
{{Imperial Nova-class Frigate}}
{{Imperial Oberon-class Battleship}}
{{Imperial Odysseus-class Galleass of War}}
[img[Old Fashioned Easy Apple Crisp.20200930]]

This easy apple crisp is made the old fashioned way like Grandma used to make, and is perfect with a scoop of vanilla ice cream and salted caramel sauce!


:Prep Time 15 mins
:Cook Time 45 mins
:Total Time 1 hr
:Servings 6 servings
:Calories 301
;Ingredients
  

:6 golden delicious apples, peeled and chopped - (other varieties can be used, can also be sliced)
:2 Tbsp granulated sugar
:1 3/4 tsp ground cinnamon, - divided
:1 1/2 tsp lemon juice
:1 cup light brown sugar
:3/4 cup old fashioned oats
:3/4 cup all-purpose flour
:1/2 cup cold unsalted butter, diced into small cubes
:pinch of kosher salt

;Instructions
 

 :   Preheat oven to 350 F degrees.  Butter an 8x8 baking dish, or spray with non-stick cooking spray.  Set aside.
:   In a mixing bowl, add chopped apples, granulated sugar, 3/4 tsp of the cinnamon and lemon juice.  Stir to combine, then transfer to prepared baking dish.
:    In a separate mixing bowl, add topping ingredients (brown sugar, oats, flour, 1 tsp cinnamon, salt, and diced cold butter).  Use a pastry cutter to cut the butter into the oat mixture, using a slight downward twisting motion, until mixture resembled pea-sized crumbs.  ::Alternatively, you can use two forks or even your hands to cut butter into the mixture.
:    Spread topping over apples in baking dish, and gently pat to even it out.  Bake 40-50 minutes, until golden brown and bubbly.
:    Serve warm and enjoy!
<<image-right "Old-Fashioned Apple Dumplings.20200930" caption:"Old-Fashioned Apple Dumplings" width:"400px">>

;Apple Dumplings
:Servings 8 servings
:Prep 30 minutes
:Cook 50 minutes
:Total 1 hour 20 minutes


An easy recipe for Apple Dumplings - fabulous cinnamon-sugar apples baked in a flaky pastry surrounded by a buttery brown sugar sauce.

;Ingredients:
;For the Pastry:

:    3 cups
:    all-purpose flour
:    1 teaspoon
:    salt
:    1 cup
:    vegetable shortening
:    (chilled)
:    ⅓ cup
:    ice water

;For the Apples:

:    8 medium Granny Smith apples
:    (peeled and cored)
:    8 teaspoons
:    unsalted butter
:    8 teaspoons
:    granulated sugar
:    1½ teaspoons
:    ground cinnamon

;For the Sauce:

:    1½ cups
:    light brown sugar
:    1 cup
:    water
:    ½ cup
:    salted butter     (cubed)

---

;Directions:

#    Make the Pastry Dough: In a large bowl, whisk together the flour and salt. Using a pastry blender or two knives, cut in the shortening until the mixture is crumbly. Gradually add the ice water, tossing the mixture with a fork, until the dough forms a cohesive mass. If the dough needs more water to come together, add it 1 teaspoon at a time. Divide the dough into eight equal portions, wrap each in plastic wrap and refrigerate for at least 30 minutes.
#    Preheat oven to 350 degrees F. In a small bowl, stir together the granulated sugar and cinnamon; set aside.
#    Assemble the Apples: Roll each portion of dough on a lightly floured work surface into a 7-inch square. Place an apple in the center of each square. Place 1 teaspoon of butter and 1 teaspoon of the cinnamon-sugar mixture in the center of each apple.
#    Gently bring up the corners of the pastry to the center of each apple; pinch the edges to seal. Place the pastry-encased apples in a greased 9x13-inch baking dish. Sprinkle with the remaining cinnamon-sugar mixture.
#    Make the Sauce: In a large saucepan, combine the brown sugar, water and butter over medium-high heat until it just begins to boil, stirring occasionally. Pour the sauce evenly over the apples.
#    Bake for 50 to 55 minutes or until the apples are tender and the pastry is golden brown, basting occasionally with the sauce. These are best served warm immediately after baking.

;Recipe Notes:

:    Pastry Crust Alternatives: All-Butter pie crust / Flaky vodka pie crust / Crescent roll dough / Store-bought pie crust / Frozen puff pastry
:    Best Alternative Apple Varieties: Honeycrisp, Jonagold, Golden Delicious, Pink Lady, Braeburn, Cortland
:    Apple Tools: Peeler / Corer
:    Sauce Suggestions: To amp up the flavor, replace the water in the sauce with apple cider or rum!
:    Prep Ahead: The dough can be made and refrigerated for up to 3 days. Assembled apple dumplings can be kept covered in the refrigerator for up to 24 hours. Remove from refrigerator 30 minutes prior to baking.
:    Freezing Instructions: Freeze unbaked, assembled apple dumplings for up to 2 months. Thaw in the refrigerator overnight, remove 30 minutes before baking, and proceed with recipe.
:    Serving Suggestions: Vanilla ice cream / Butter pecan ice cream / Homemade whipped cream
:    Storage: Leftover apple dumplings can be stored in an airtight container at room temperature for up to 2 days, or in the refrigerator for up to 4 days.
:    Reheating Instructions: Reheat the dumplings in a foil-covered pan at 350 degrees for 10 to 12 minutes. You can also microwave the leftover dumplings, but the crust will be soft.
    Recipe adapted from Taste of Home

Nutritional values are based on one serving

;Nutrition:
:Calories: 803kcal
:Fat: 42g
:Saturated fat: 16g
:Cholesterol: 41mg
:Sodium: 410mg
:Potassium: 300mg
:Carbohydrates: 106g
:Fiber: 6g
:Sugar: 63g
:Protein: 6g
:Vitamin A: 578%
:Vitamin C: 8%
:Calcium: 59%
:Iron: 3%
{{Imperial Olympia-class Strike Cruiser}}
;Website
:https://onemanhisbrushes.blogspot.com/
:Sands of Sudan
:Examples of Tiger Miniatures

---

<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://onemanhisbrushes.blogspot.com/"></iframe>
; Punchlist
: Look for website
: Look for STL
: Look for new stuff
: Add TW folder
@@.image-float-left

@@<br>

Find the 1 Player Podcast and get a copy of the 'zine for a journal story and see about sending it to Claire as a gift

<div style="clear: both;">

---
;Source
:https://medium.com/boox-content-hub/best-e-ink-tablets-for-reading-large-format-pdfs-summer-2020-ed101de679ec

[img[Onyx BOOX Max3.image]]

Digital files save trees from sacrificing for being printing paper, but reading PDFs on small LCD screens can no longer be endurable. You need a big E Ink screen close to an A4-size paper to help you read large-format PDFs comfortably.

Among big E Ink tablets, 13.3" Max3 is the most suitable device for showing academic papers, essays, scientific papers, and other large-format PDF materials. On Max3, you can read A4-size PDFs with 16px words without continuous scrolling and zooming.

The size is not the only factor that makes Max3 stand out in the market, as Sony also provides 13.3inch eReaders. BOOX’s powerful built-in NeoReader combined its large size makes Max3 a killer E Ink tablet for big documents.

In the NeoReader, you can adjust the display and contrast of texts and even reflow them. The display panel enables you to crop margins to adapt the content area to the display, which is particularly helpful if you read PDFs with wide margins. Also, you can set up pagination to make the pages flow like you’re reading on mobile. In this way, you can improve your reading efficiency.

The Contrast settings also provide great value for reading PDFs. You can remove the watermark and adjust the contrast of images and texts separately. For instance, when you find the files’ pictures are too dark while the text color is too light to read, you can modify their contrast to different levels to achieve a better display effect.

The NeoReader is so powerful which helps 13.3’’ Max3 render the max readability of PDFs. You can now buy Max3 with free accessories at $779.99 in BOOX Shop and Amazon, saving you $80 from the original price.
{{Tau Or'es El'leath (Custodian)-class Carrier}}
;Orca Build Plan
:9	Capital Capacitor Battery
:: Blueprint ''1,146,936,000''
:35	Capital Cargo Bay
:: Blueprint ''833,702,400''
:7	Capital Computer System
:: Blueprint ''1,228,398,800''
:15	Capital Construction Parts
:: Blueprint ''1,005,494,000''
:4	Capital Corporate Hangar Bay
:: Blueprint ''1,670,784,800''
:4	Capital Sensor Cluster
:: Blueprint ''1,202,763,200''
:7	Capital Ship Maintenance Bay
:: Blueprint ''1,202,763,200''

|!Item  |!Quantity  |!ME Waste  |!Volume  |!Price per Unit  |!Sum |
|!Materials |<|<|<|<|<|
|!Capital Cargo Bay | 35 | 0 | 350,000.00 m3 |  |  |
|!Tritanium  | 27,559,413  | 0  |  | 6.83 ISK adj  | 188,230,790.79 ISK |
|!Pyerite  | 2,272,851  | 0  |  | 20.99 ISK adj  | 47,707,142.49 ISK |
|!Mexallon  | 775,404  | 0  |  | 121.58 ISK adj  | 94,273,618.32 ISK |
|!Isogen  | 110,376  | 0  |  | 39.95 ISK adj  | 4,409,521.20 ISK |
|!Nocxium  | 31,437  | 0  |  | 1,142.40 ISK adj  | 35,913,628.80 ISK |
|!Zydrine  | 9,009  | 0  |  | 1,296.00 ISK adj  | 11,675,664.00 ISK |
|!Megacyte  | 2,016  | 0  |  | 663.56 ISK adj  | 1,337,736.96 ISK |
|!Capital Computer System | 7 | 0 | 70,000.00 m3 |  |  |
|!Tritanium  | 2,694,561  | 0  |  | 6.83 ISK adj  | 18,403,851.63 ISK |
|!Pyerite  | 699,993  | 0  |  | 20.99 ISK adj  | 14,692,853.07 ISK |
|!Mexallon  | 277,893  | 0  |  | 121.58 ISK adj  | 33,786,230.94 ISK |
|!Isogen  | 41,461  | 0  |  | 39.95 ISK adj  | 1,656,366.95 ISK |
|!Nocxium  | 11,706  | 0  |  | 1,142.40 ISK adj  | 13,372,934.40 ISK |
|!Zydrine  | 4,083  | 0  |  | 1,296.00 ISK adj  | 5,291,568.00 ISK |
|!Megacyte  | 1,865  | 0  |  | 663.56 ISK adj  | 1,237,539.40 ISK |
|!Capital Construction Parts | 15 | 0 | 150,000.00 m3 |  |  |
|!Tritanium  | 5,240,808  | 0  |  | 6.83 ISK adj  | 35,794,718.64 ISK |
|!Pyerite  | 1,265,990  | 0  |  | 20.99 ISK adj  | 26,573,130.10 ISK |
|!Mexallon  | 509,342  | 0  |  | 121.58 ISK adj  | 61,925,800.36 ISK |
|!Isogen  | 68,904  | 0  |  | 39.95 ISK adj  | 2,752,714.80 ISK |
|!Nocxium  | 20,655  | 0  |  | 1,142.40 ISK adj  | 23,596,272.00 ISK |
|!Zydrine  | 7,263  | 0  |  | 1,296.00 ISK adj  | 9,412,848.00 ISK |
|!Megacyte  | 2,862  | 0  |  | 663.56 ISK adj  | 1,899,108.72 ISK |
|!Capital Ship Maintenance Bay | 7 | 0 | 70,000.00 m3 |  |  |
|!Tritanium  | 3,633,582  | 0  |  | 6.83 ISK adj  | 24,817,365.06 ISK |
|!Pyerite  | 1,196,635  | 0  |  | 20.99 ISK adj  | 25,117,368.65 ISK |
|!Mexallon  | 335,866  | 0  |  | 121.58 ISK adj  | 40,834,588.28 ISK |
|!Isogen  | 56,763  | 0  |  | 39.95 ISK adj  | 2,267,681.85 ISK |
|!Nocxium  | 15,505  | 0  |  | 1,142.40 ISK adj  | 17,712,912.00 ISK |
|!Zydrine  | 5,759  | 0  |  | 1,296.00 ISK adj  | 7,463,664.00 ISK |
|!Megacyte  | 2,621  | 0  |  | 663.56 ISK adj  | 1,739,190.76 ISK |
|!Capital Corporate Hangar Bay |! 4 |! 0 |! 40,000.00 m3 |!  |!  |
|!Tritanium  | 2,100,392  | 0  |  | 6.83 ISK adj  | 14,345,677.36 ISK |
|!Pyerite  | 524,391  | 0  |  | 20.99 ISK adj  | 11,006,967.09 ISK |
|!Mexallon  | 184,670  | 0  |  | 121.58 ISK adj  | 22,452,178.60 ISK |
|!Isogen  | 33,556  | 0  |  | 39.95 ISK adj  | 1,340,562.20 ISK |
|!Nocxium  | 9,641  | 0  |  | 1,142.40 ISK adj  | 11,013,878.40 ISK |
|!Zydrine  | 3,377  | 0  |  | 1,296.00 ISK adj  | 4,376,592.00 ISK |
|!Megacyte  | 1,570  | 0  |  | 663.56 ISK adj  | 1,041,789.20 ISK |
|!Capital Sensor Cluster |! 4 |! 0 |! 40,000.00 m3 |!  |!  |
|!Tritanium  | 1,596,928  | 0  |  | 6.83 ISK adj  | 10,907,018.24 ISK |
|!Pyerite  | 363,694  | 0  |  | 20.99 ISK adj  | 7,633,937.06 ISK |
|!Mexallon  | 147,158  | 0  |  | 121.58 ISK adj  | 17,891,469.64 ISK |
|!Isogen  | 23,973  | 0  |  | 39.95 ISK adj  | 957,721.35 ISK |
|!Nocxium  | 6,495  | 0  |  | 1,142.40 ISK adj  | 7,419,888.00 ISK |
|!Zydrine  | 2,398  | 0  |  | 1,296.00 ISK adj  | 3,107,808.00 ISK |
|!Megacyte  | 1,073  | 0  |  | 663.56 ISK adj  | 711,999.88 ISK |
|!Capital Capacitor Battery |! 9 |! 0 |! 90,000.00 m3 |!  |!  |
|!Tritanium  | 2,648,482  | 0  |  | 6.83 ISK adj  | 18,089,132.06 ISK |
|!Pyerite  | 873,521  | 0  |  | 20.99 ISK adj  | 18,335,205.79 ISK |
|!Mexallon  | 320,331  | 0  |  | 121.58 ISK adj  | 38,945,842.98 ISK |
|!Isogen  | 52,164  | 0  |  | 39.95 ISK adj  | 2,083,951.80 ISK |
|!Nocxium  | 14,913  | 0  |  | 1,142.40 ISK adj  | 17,036,611.20 ISK |
|!Zydrine  | 5,346  | 0  |  | 1,296.00 ISK adj  | 6,928,416.00 ISK |
|!Megacyte  | 2,268  | 0  |  | 663.56 ISK adj  | 1,504,954.08 ISK |

| Total Volume  | 810,000.00m3  | Production Costs  | 971,028,411.10 ISK |
code {
    font-size: 14px !important;
}

.container {
    min-width: 440px;
    max-width: 460px;
    width: auto;
}

.loader {
    animation: spin 2s linear infinite;
    border: 4px solid #f3f3f3;
    border-radius: 50%;
    border-top: 4px solid #28a745;
    float: left;
    height: 1.4em;
    margin-right: 1em;
    width: 1.4em;
}

@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}

.list-group {
    font-size: .9em !important;
    margin-bottom: 1rem !important;
}

.list-group-item {
    padding: 5px 10px !important;
}

.list-group-item+.list-group-item:first-child {
    border-top-width: 1px !important;
    border-top-left-radius: .25rem;
    border-top-right-radius: .25rem;
}

.list-group-item:hover {
    cursor: pointer
}

.settings {
    padding-bottom: 10px;
    margin-bottom: 10px;
    border-bottom: 1px solid #333;
    font-size: 90%;
    text-align: left;
}

.settings label {
    display: block;
}

.settings label input {
    vertical-align: middle;
}

.settings .description {
    margin-top: 3px;
    font-size: 80%;
    color: #787878;
}

.small {
    margin-top: 3px;
    margin-left: 12px;
    font-size: 80%;
    color: #787878;
}

#list {
    padding-left: 0px;
}

#child {
    border-top: 0px;
}

#update-available {
    margin-top: 10px;
    text-align: left;
    display: none;
}

#update-available a:hover,
#update-available a:active {
    text-decoration: underline;
}

#lock-database-button {
    float: right;
    width: 2.5rem;
}

#login-filter {
	outline: none;
	border-radius: 4px;
	border: 1px solid #ccc;
	margin-bottom: 5px;
	padding: 2px 10px;
	width: 100%;
}

@media (prefers-color-scheme: dark), (prefers-color-scheme: light) {
    body {
        background: var(--kpxc-background-color) !important;
        color: var(--kpxc-text-color) !important;
    }

    input, input[type="checkbox"] {
        background-color: var(--kpxc-input-background-color) !important;
        border: var(--kpxc-input-border);
        border-color: var(--kpxc-input-border-color);
    }

    .list-group-item {
        background-color: var(--kpxc-input-background-color) !important;
        color: var(--kpxc-text-color) !important;
    }

    .list-group-item:hover {
        background-color: var(--kpxc-table-hover-color) !important;
    }

    span.bg-success {
        background-color: var(--kpxc-table-hover-color) !important;
        color: var(--kpxc-text-color) !important;
    }

    #login-filter {
        color: var(--kpxc-text-color) !important;
    }
}
{{bfg_Ship Template}}

{{bfg_Ship Template}}



{{bfg_Ship Template}}
{{bfg_Ship Template}}
[img[Ork Kill Kroozer.image]]
{{bfg_Ship Template}}
[img[Ork Onslaught Attack Ship.image]]

;Sector
:

!Warlord

;Up to 1 Warlord per 500 pts

You may include 1 or more Warlord in your fleet, each of whom must be assigned to a ship or squadron. If the fleet is worth 500 points or more it must include at least 1 Warlord to lead it.

|Ork Warlord | 40 pts |

Warlords get one re-roll. They can have up to two more re-rolls for the additional cost noted below.

|One extra re-roll | 20 pts |
|Two extra re-rolls | 40 pts |

A vessel carrying a Warlord doubles its boarding value and may include up to one of the upgrades shown below at the additional cost indicated.

|Maniac Gunners | +35 pts |The ship may re-roll the dice for the firepower of its gunz when it fires. |
|Mad Meks | +25 pts |The ship may re-roll the dice for damage control. |
|Extra Power Fields | +25 pts |The ship’s shield value is increased by +1. |
|Mega-armoured Boarding Parties  | +15 pts |+1 modifier on boarding. |
|Looted Torpedoes | +20	pts |The ship may re-roll the dice for the strength of torpedo salvoes when it fires. |

An Ork fleet can include a max. of one Warlord per 500 points. ie, if the fleet is worth up to 500 points, it may have one Warlord. If it is worth 500-1,000 points two Warlords may be included, etc.

!Kroozers

;You may include up to six kroozers in your fleet.

|[[Ork Kill Kroozer]] | 155 pts |
|[[Ork Terror Kroozer]] | 185 pts |

!Escorts
;You can include any number of Escorts in your fleet.

|[[Ork Onslaught Attack Ship]] | 45	pts |
|[[Ork Savage Gunship]] | 40	pts |
|[[Ork Ravager Attack Ship]] | 35	pts |
|[[Ork Brute Ramship]] | 25	pts |
!![[Ork Pirates Ship Class]]
<<tabs "[tag[Ork Pirates Ship Class]!title[Ork Pirates Ship Class]!sort[modified]]" "[[Ork Pirates Ship Class]]" "$:/state/popup/tabs">>
!![[Ork Ravager Attack Ship]]
<<tabs "[tag[Ork Ravager Attack Ship]!title[Ork Ravager Attack Ship]!sort[modified]]" "[[Ork Ravager Attack Ship]]" "$:/state/popup/tabs">>
[img[Ork Ravager Attack Ship.image]]
[img[Ork Savage Gunship.image]]


{{bfg_Ship Template}}
;Period
:Third Armageddon War

!Warlord
;Up to 1 Warlord per 500 pts

You may include 1 or more Warlord in your fleet, each of whom must be assigned to a ship or squadron. If the fleet is worth 500 points or more, it must include at least 1 Warlord to lead it.

|Ork Warlord | 40 pts |

Warlords get one re-roll. They can have up to two more re-rolls for the additional cost noted below.
|One extra re-roll | 20 pts |
|Two extra re-rolls | 40 pts |

A vessel carrying a Warlord doubles its boarding value and may include up to one of the upgrades shown below, at the additional cost indicated.
|Maniac Gunners | +35 pts |The ship may re-roll the dice for the firepower of its gunz when it fires.|
|Mad Meks | +25 pts |The ship may re-roll the dice for damage control.|
|Extra Power Fields | +25 pts |The ship's shield value is increased by +1.|
|Mega-armoured Boarding Parties |+15 pts | + 1 modifier on boarding.|
|Looted Torpedoes | +20 pts |The ship may re-roll the dice for the strength of torpedo salvoes when it fires.|

An Ork fleet can include a maximum, of one Warlord per 500 points. So if the fleet is worth up to 500 points, it may have one Warlord. If it is worth 500-1,000 points two Warlords may be included, etc.

!SPACE HULKS

You may include up to one Ork Space Hulk in your fleet per 1,500 points.

|[[Ork Space Hulk]] | 600 pts |

An Ork fleet can include a maximum of one space hulk per 1,500 points. So if the fleet is worth up to 1,500 points, it may include one Space hulk. If it is worth 1,500-3,000 points, two space hulks may be included, etc. Each Ork hulk must be assigned an Ork Warlord to command it.

!Battleships & Battlekroozers

During the Third Armageddon War, four particularly monstrous Ork vessels earned the appellation ‘battleship’ even if such distinct classes are unknown to the Orks themselves, who refer to these four, and most similar vessels, as battleroozers. For every two kroozers included in your fleet, you may pick one vessel from the list below.

|[[Slamblasta*  ]] | 295	pts |
|[[Gorbag's Revenge*  ]] | 310	pts |
|[[Dethdeala*  ]] | 275	pts |
|[[Kroolboy*  ]] | 270	pts |
|[[Hammer Class Battle Kroozer ]] | 245	pts |

*These four ships are unique, and no fleet may ever contain more than one example of each of these ships. You may, however, include as many out of the four different ships as the size of your fleet permits.

!!Kroozers

;0-6 Kroozers

You may include up to six kroozers in your fleet.

|[[Ork Kill Kroozer ]] | 155 pts |
|[[Ork Terror Ship ]] | 185 pts |

!Escorts

You can include any number of Escorts in your fleet.

|[[Ork OnSlaught Attack Ship ]] | 45 pts |
|[[Ork RaVager Attack Ship ]] | 35 pts |
|[[Ork SaVage Gunship ]] | 40 pts |
|[[Ork BrUte Ramship ]] | 25 pts |

!Ork Roks

You can include any number of Ork Roks in your fleet.

|[[Ork Rok ]] | 80 pts |

Ork Roks may also be purchased with points for planetary defences, in scenarios where these are used. Ork Roks may be squadroned with up to three other Roks (total squadron size of four), but not with any other vessels.

!Ordnance

Ships with launchbays can have a mixture of .fi.ghta-bom.merz or assault boats. Kill kroozers and Terror ships can replace their prow batteries with torpedo tubes at no extra cost, and if they choose to do so may also be armed with boarding torpedoes at a cost of +5 points per model, as may Gorbag’s Revenge.
<<list-links "[all[orphans]sort[created]]">>
; .75
:https://www.printplaygames.com/product/0-75-squares/
[img[Over Open Sights - Website Scrape.image.01]]

[img[Over Open Sights - Website Scrape.image.02]]

{{Imperial Overlord-class Battlecruiser}}
;Source
:https://www.gmtgames.com/p-865-pacific-war-the-struggle-against-japan-1941-1945.aspx
;Receipt
:[img height=200 [Pacific War: The Struggle Against Japan, 1941-1945.image.receipt]]


!!Primary Colors
;British Gun Grey
:Grey serge uniform
|{{Wargames Foundry 108A}}|{{Wargames Foundry 108B}}|{{Wargames Foundry 108C}}|
;Prussian Blue
:British Naval uniform
|{{Wargames Foundry 066A}}|{{Wargames Foundry 066B}}|{{Wargames Foundry 066C}}|

!!Secondary Colors
;British Blue Grey
:Puttees
|{{Wargames Foundry 075A}}|{{Wargames Foundry 075B}}|{{Wargames Foundry 075C}}|
;Buff Leather
:Buff Leather Straps
|{{Wargames Foundry 007A}}|{{Wargames Foundry 007B}}|{{Wargames Foundry 007C}}|
;Scarlet
:Red serge Tunic
|{{Wargames Foundry 068A}}|{{Wargames Foundry 068B}}|{{Wargames Foundry 068C}}|
;Boneyard
:Helmets
:Mahdist linens
|{{Wargames Foundry 009A}}|{{Wargames Foundry 009B}}|{{Wargames Foundry 009C}}|
;Denison Tan
:Indian Uniform?
|{{Wargames Foundry 097A}}|{{Wargames Foundry 097B}}|{{Wargames Foundry 097C}}|

|{{Wargames Foundry 099A}}|{{Wargames Foundry 099B}}|{{Wargames Foundry 099C}}|
;Deep Blue
:British Pants
|{{Wargames Foundry 020A}}|{{Wargames Foundry 020B}}|{{Wargames Foundry 020C}}|

!! Paint Set
;Horse Colors


!!Already Purchased
;Austrian White
:Supply bag
|{{Wargames Foundry 067A}}|{{Wargames Foundry 067B}}|{{Wargames Foundry 067C}}|
|!PaintType |!CorporateID |!PaintName |!Wargames Foundry |
| Paint | 70.846 | Mahogany Brown | 102B |
| Metallic | 70.801 | Brass | 103A |
| Metallic | 70.996 | Gold | 103C |
| Metallic | WP1130 | Plate Mail Metal | 104B |
| Metallic | 70.997 | Silver | 104C |
| Metallic | WP1129 | Shining Silver | 104C |
| Metallic | WP1131 | Gun Metal | 105B |
| Paint | 71.255 | Light Blue RLM65 | 108A |
| Paint | 71.345 | Russian AF Grey N.8 | 108C |
| Paint | WP1116 | Deep Blue | 111C |
| Paint | 70.943 | Grey Blue | 112A |
| Paint | 70.880 | Khaki Grey | 116A |
| Paint | 71.005 | Intermediate Blue / Grey Blue | 117B |
| Paint | 70.836 | London Grey | 118B |
| Paint | WP1127 | Tanned Flesh | 119B |
| Paint | 70.914 | Green Ochre | 11B |
| Paint | AK3145 | Medium Grey / German Grey Uniforms | 121A |
| Paint | 70.873 | US Field Drab | 121C |
| Paint | 70.815 | Basic Skin Tone | 122C |
| Paint | 70.845 | Sunny Skin Tone | 122C |
| Paint | WP1421 | Elven Flesh | 122C |
| Paint | 70.804 | Beige Red | 123B |
| Paint | 70.805 | German Orange | 124C |
| Paint | 70.851 | Bright Orange | 125A |
| Paint | WP1402 | Arid Earth | 127F |
| Paint | 70.976 | Buff | 12C |
| Paint | 70.940 | Saddle Brown | 13A |
| Paint | WP1124 | Oak Brown | 14A |
| Paint | WP1122 | Fur Brown | 14B |
| Paint | 70.926 | Red | 15A |
| Paint | AK3073 | Red Brown Leather | 15B |
| Paint | WP1104 | Pure Red | 15B |
| Paint | 70.835 | Salmon Rose | 16B |
| Paint | 70.803 | Brown Rose | 17C |
| Paint | 70.915 | Deep Yellow | 1B |
| Paint | WP1114 | Crystal Blue | 22A |
| Paint | 70.844 | Deep Sky Blue | 22B |
| Paint | WP1109 | Goblin Green | 25B |
| Paint | AK3058 | Intermediate Green | 26B |
| Paint | AK3141 | Field Grey Base 1 | 28B |
| Paint | AK3143 | Grey Green / Field Grey Lights | 29C |
| Paint | WP1438 | Moon Dust | 30C |
| Paint | 70.887 | Brown Violet | 31B |
| Paint | 70.887 | US Olive Drab / Brown Violet | 31B |
| Paint | 70.924 | Russian Uniform WWII | 31B |
| Paint | 70.987 | Medium Grey | 31C |
| Paint | 70.862 | Black Grey | 32A |
| Paint | 70.992 | Neutral Grey | 32A |
| Paint | 70.994 | Dark Grey | 32A |
| Paint | 70.989 | Sky Grey | 33A |
| Paint | WP1454 | Spaceship Exterior | 33B |
| Paint | 70.883 | Silvergrey | 33B |
| Paint | 71.045 | US Light Grey / Cement Grey | 33B |
| Paint | 70.951 | White | 33C |
| Paint | 71.001 | White | 33C |
| Paint | 70.950 | Black | 34A |
| Paint | WP1101 | Matt Black | 34A |
| Metallic | WP1467 | True Copper | 36B |
| Paint | 70.817 | Scarlet | 37C |
| Paint | 70.947 | Dark Vermillion | 37C |
| Paint | 71.102 | Red | 37C |
| Paint | WP1415 | Dark Sky | 39B |
| Paint | 70.942 | Light Green | 46A |
| Paint | 70.990 | Light Grey | 57C |
| Paint | 70.837 | Pale Sand | 5C |
| Paint | 70.984 | Flat Brown | 61B |
| Paint | AK3144 | Field Grey Shadows | 63A |
| Paint | 71.139 | US Field Drab | 63B |
| Paint | 70.899 | Dark Prussian Blue | 65A |
| Paint | 71.008 | Pale Blue | 67A |
| Paint | 71.046 | Pale Blue Grey | 67A |
| Paint | AK3064 | Green Black Waffen Spring / Summer Dark Spots | 69A |
| Paint | WP1112 | Angel Green | 69B |
| Paint | WP1123 | Leather Brown | 6B |
| Paint | 70.860 | Medium Fleshtone | 6C |
| Paint | 70.982 | Cavalry Brown | 72C |
| Paint | 70.930 | Dark Blue | 76A |
| Paint | AK3146 | Grey Blue / German Grey Uniform Light | 78C |
| Paint | 70.913 | Yellow Ochre | 7A |
| Paint | WP1108 | Necrotic Flesh | 80C |
| Paint | WP1125 | Skeleton Bone | 80C |
| Paint | AK3142 | Field Grey Base 2 | 81B |
| Paint | 70.921 | English Uniform | 83C |
| Paint | 70.988 | Khaki | 85B |
| Paint | 71.138 | US Sand | 85C |
| Paint | 70.955 | Flat Flesh | 86C |
| Paint | WP1126 | Barbarian Flesh | 86C |
| Paint | WP1120 | Monster Brown | 88A |
| Paint | 70.875 | Beige Brown | 89B |
| Paint | 70.875 | Beige Brown | 89B |
| Paint | AK3081 | WWI British Uniform Base | 89B |
| Paint | 70.917 | Beige | 8B |
| Paint | AK3033 | Light Sand / Leather Highlights | 8B |
| Paint | 70.888 | Olive Grey | 91A |
| Paint | 70.894 | Cam. Olive Green | 91A |
| Paint | 70.314 | Canvas | 92A |
| Paint | AK3026 | Tan / Global Light Shade | 92A |
| Paint | WP1404 | Banshee Brown | 92B |
| Paint | 70.871 | Leather Brown | 93A |
| Paint | 70.886 | Green Grey | 93B |
| Paint | 70.874 | Tan Earth | 97C |
| Paint | 70.874 | Tan Earth | 97C |
| Paint | 70.890 | Reflective Green / Refractive Green | 98B |
| Paint | 70.825 | Ger. Cam. Pale Brown | 99A |
| Paint | 70.825 | German Cam. Pale Brown | 99A |
| Paint | 70.876 | Brown Sand | 99B |
| Paint | 70.819 | Iraqui Sand | 99C |
| Paint | 70.918 | Ivory | 9C |


;Grey Serge Uniform
:WF WFPS108 - British Gun Grey

;British Uniform Khaki
:WF WFPS100 - British Uniform Brown

;British Breeches Blue
:WF WFPS020 - Deep Blue


:WF WFPS011 - Rawhide

:WF WFPS012 - Drab





;Camel
:VMC Desert Yellow
:WF WFPS055 - Butterfudge

;British Scarlet Coat
:WF WFPS068 - British Red Coat

;Putees
:WF WFPS118 - Rebel Grey

;Source
:[[Imaginative Strategist|http://www.imaginative-strategist.layfigures.com/index.html]]
:https://gregpanzerblitz.com/

Panzer Leader lets you re-create all of the fast, furious action of tactical armored combat on the western front during World War II. Rules of play consider aspects of tactical armored warfare such as gun ranges, target elevation, indirect artillery fire, fortifications, roadblocks, minefields, close air support, naval support fire, engineer demolition, and opportunity fire."
;Source
:https://www.parchmentnlead.com/contact-us/
Preparation (2-6 Players)
1. Place the political and military boards between the players of both Sides and separate the objectives into two decks (diplomatic and military).
2. Place the Sideboards aside so that they are out of the way but are visible to the other side.
3. Both Sides start with Morale 36 and Economy ⓿.
4. Separate the following Characters from the pile of cards:
Alfonso XIII, General Franco and Juan March [031, 039, 060]
Manuel Azaha, General Miaja and Vicente Uribe [036, 156, 187]
5. A randomly chosen player must choose one of the Character cards. Next, the second player must choose a Character card from the Side opposite to the first player. The third player must choose a card from the Side opposite to that of the second player and so on until all players have chosen a Character (and therefore a Side).
6. The chosen characters start directly in the Rear. Those who were not chosen are returned to the pile of cards.
7. Adjust Morale by following the Cohesion rules.
8. Separate the cards into two decks, one with the National Side cards and the other with the Republican Side cards.
9. Shuffle both decks separately and take 100 cards from each to form the game deck (the Reserve) for both Sides.
10. Pick up the first 6 cards of each Reserve and distribute them in rows differentiated by Side between the political and military boards. This game area is called "La Patria".
11. Each Side receives 6 random cards from the cards that were left out of the newly formed Reserves. Said cards are distributed between the players of the same Side as they wish.
12. Return the remaining unused cards to the box.
13. The National Side begins the game following the Turn Sequence (I, II, III).
I. ADJUSTMENT PHASE
Economy (Maximum 39)
The active Side increases its Economy to its base value (❾)
Apply any increases caused by game effects.
Morale (the Active Side OO Moral)
RESISTANCE
The active Side reduces the Resistance Turns of the military objectives it defends by ❶ if the Resistance Points are at least half of the initial maximum (rounded up).
REINFORCEMENT
The active Side draws from its Reserve as many cards as are needed so that there are again ❻ cards in the Homeland.
II. MAIN PHASE (❻ ACTIONS BY SIDE)
Note: Players who share the same Side are limited to a maximum of 3 actions each.
The available actions are those indicated from 🇦 to 🇬.
Once one Side declares that it is taking an action, the opposing Side cannot prevent it from taking place.
However, the passive side may reply by playing a management card or using the intervention of a character, after the active side's action is over.
🇦 PLAYING CARDS
Note: On its first turn, a Side cannot play international aid cards.
When playing a card, the Side that plays it reduces its Economy by an amount. equal to the cost in "coins" (📀) indicated on the card itself.
If the cost is zero, it is represented by a “black coin” (💿)
Some cards indicate a mandatory effect  o  that must be performed to play it. Other cards point out a condition  c  that must be met in order to play it.
Cohesion
When a Side plays the first card of a faction, its square is marked on the Side board.
Cards that belong to more than one faction only count as one of them when played (at the choice of the player).
When playing the first card of the second faction, Morale ⮋❶. With the third faction Morale O ©. With the fourth faction the Morale ⇓❷ and so on until the eighth faction (⮋❼).
International Aid: The three International Aid icons count as a single faction.
CHARACTER AND ARMY CARDS (⚫AND ⬛)
Character and Army cards remain in the Rear until some event in the game eliminates them.
MANAGEMENT LETTERS (FREE REPLICA AS PASSIVE SIDE)
A management card takes effect immediately and is removed.
🇧 Buy Cards (maximum ❻ cards in hand)
Each Side has a maximum of ❻ cards in hand among all his Players.
If the maximum is exceeded, the surplus is chosen and discarded immediately.
The player can add to his hand a card from his Side present in the Homeland by paying the cost in “coins” (📀/💿) indicated on the card itself.
Management Cards ( █ )
When you buy a management card, you can play it immediately without the card being added to your hand, or... 
Add it to your hand and play it later paying its cost.
🇨 Intervention (Free Action)
Each intervention can only be activated once in each turn in which its use is indicated.
The intervention of the Leader is not considered as a normal intervention, therefore the cards that refer to the intervention of Characters do not influence the Leader.
🇩 Appoint A Leader (1 Time Per Turn)
If the active Side has a character with  Liderazgo  and the naming conditions of their faction are met, they can be named Side Leader (place it on the Side board).
Characters that have a smaller icon on their faction icon are considered “sympathizers” of that faction and count as Characters of that faction only for the purposes of naming Leader.
If a character belonging to more than one faction is named a leader, it must be specified with the support of which faction it is named. The character is considered the leader of that faction.
Side of the Republic: The Leader can be replaced each turn by another character if he meets the naming requirements.
National Side: The Leader cannot be replaced voluntarily.
🇪 Activate Objectives
The objective deck can be viewed at any time during the game.
The active Side can activate any target as long as it meets the indicated activation requirements.
When activating an objective, place it on your board on the corresponding side by matching the Attacker and Defender flags. Place the marker tokens in the positions indicated on the target itself.
An already resolved objective cannot be activated again.
Loss of Diplomacy without Political Objectives
If a Side loses Diplomacy and there is no active political objective to move Diplomacy to, the opposing Side can use one of the lost Diplomacy points to activate a political objective regardless of its activation conditions.
🇫 Military Action (1 Military Action per Army)
Mobilization
Take a Character / Army from the Rear to a Military objective by paying its cost (the numerical value indicated in ▼).
Demobilization (without Cost)
Take a Character or Army from a military objective to the Rear at no cost.
Recovery (⮋❶ Attrition to an Army)
Army Skills (Special Action)
Some Army skills are activated during the Main Phase. In their description it is specified whether they consume a military action or not.
🇬 Declare Combat (1 Time Per Turn)
Once the combat has been declared and after resolving the possible Reply of the opposing Side, the active Side can renounce its declaration and consider the combat interrupted.
It is not mandatory that all mobilized Characters and / or Armies participate in combat.
1st Phase of Strategy
Both Sides can play management cards, use character intervention, activate Army skills, and pass.
The phase ends when both Sides pass.
Offense Statement
Only Characters and Armies that have not spent their military action previously in the turn can attack / counterattack.
Characters and Armies can form groups (to add their forces) as long as they are of the same type (▼,  ▼, ▽).
Each group must contain at least ❶ Army.
Each Army can only be under the command of ❶ Character, but it can not go in the same group if it has  Disciplina .
2nd Phase Of Strategy (Equal To The First)
Defensive Statement
Each Army can be assigned to an attacking group based on its defense capacity ( ■ ■ □). Armies can only defend Armies of the types indicated on their card.
You can assign multiple defending groups to each attacking group.
Characters and Armies defending the same group are not considered a single group with each other.
3rd Phase Of Strategy (Equal To The First)
Combat Resolution
Each group adds the strength of all its Armies.
Attacking groups of the active Side Ⓐ that have not been defended reduce the Resistance Points of the military target by an amount equal to their total strength.
Counter-attacking groups of the active Side Ⓓ that have not been defended increase the Resistance Points of the military target by an amount equal to their total strength.
Clash (Attacking Group Vs Defender Group)
Armies are eliminated in increasing order of strength until completing the total strength of the opposing Side.
An Army is eliminated if it takes damage equal to or greater than its strength.
The Side that receives the damage decides which Army among its own is eliminated if there is more than one possibility.
A Character is eliminated if all the Armies grouped under his command are eliminated.
When an Army receives less damage than its strength in a confrontation, it suffers Attrition (indicate this by any token).
Each Wear supposes an ⮋❶ force (accumulative).
III. Armistice Phase
Objective Resolution
If in the same turn both sides reach the Diplomacy value indicated in a Political Objective, the winner is the active Side.
If in the same turn a Military Objective remains at ⓿ Resistance Points and ⓿ Resistance Turns, the winner is the active Side (as long as it has at least one Army with  Conquista ).
The surviving Armies and Characters of both sides are demobilized.
If the winner of an objective has a Leader, he can generate a Morale ⮉❶ for his Side or a Morale ⮋❶ to the opposing Side.
Victory Conditions
If, after solving all the objectives, the victory conditions (indicated on each Side's board) are not met for either Side, the game continues and a new Turn Sequence begins, reversing the roles of Active Side and Passive Side.
If the victory conditions are met for both sides at the same time, the active Side gains victory and the game ends.
Skills Of The Armies
 Apoyo - Permanent.
You can group this Army with the Army in the same group. 
 Asimilacion  - Permanent.
The Army is considered to be from the same faction as the Leader while in play in addition to continuing to be from its own faction.
 Ataque A Distancia X  - Combat; Cost: ⮋X Economy
Allows an Army to resolve its basic damage in combat first.
If after resolving the damage of this ability, Armies have not been eliminated for all the damage assigned, the difference is saved for the resolution of the rest of the combat.
 Bloqueo  - Permanent.
In military objectives where Armies ▼ cannot be mobilized, this ability is necessary for the attacking Side to win the objective.
In the Rear, the strength of all Armies with this ability is added. For the Side whose sum is less, the cost of playing 📀 International Aid cards is increased.
 Conquista  - Permanent.
Allows a Side to definitively win an attacked military objective when Resistance Points are reduced to ⓿.
 Control  - Permanent.
If the Resistance Points in a defended military objective are reduced to ⓿, for the objective to be resolved the opponent needs to have ⮉❶ Armies mobilized with  Conquista  additional for each defending Army mobilized with this ability.
 Curacion X  - Main Phase; Cost: ⮋X Economy
Spend a military action
All Attrition is removed from X Armies with  Conquista  mobilized on the same military objective.
 Disciplina X  - Combat; Cost: ⮋❶ Economy
Allows an Army to benefit from a Character's military bonus without being grouped with him (although it must be under his command). The Character must be able to give his military bonus to more than one Army (Military Command -  X  ) and be grouped with at least one Army.
 Distraccion -
TBP
 Enthusiasm x  - Main Phase; Cost: ⮋X Economy
Does not spend military action
An Army with this ability can be mobilized or demobilized (paying its cost) without it being considered as a military action.
 Furor x  - Combat; Cost: ⮋❶ Diplomacy
The Army has OX force in combat on the turn.
 Retorno  - Permanent.
If the Army is not eliminated during the combat, it returns to the Rear at the end of the combat.
 Terror X  - Combat; Cost: ⮋X Diplomacy
The opposing side ⮋X Morale.
 Vigor  - Permanent.
The Army does not suffer Attrition during confrontations.
Other Rules
Look At Hand
If a game effect allows you to look at the hand of the opposing Side, that effect allows you to see the hand of ALL Players of the affected Side.


{{Pendraken Miniatures}}

<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://over-open-sights.blogspot.com/2019/07/sudan-perry-miniatures-black-watch.html"></iframe>
<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://over-open-sights.blogspot.com/2019/03/sudan-gordon-highlanders.html"></iframe>
<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://over-open-sights.blogspot.com/2018/12/perry-miniatures-sudan-naval-brigade_19.html"></iframe>
;Source
:https://over-open-sights.blogspot.com/2019/07/sudan-perry-miniatures-black-watch.html

[img[https://1.bp.blogspot.com/-qF4ETc9sC3o/XTWtbPvifGI/AAAAAAAAG_s/ENHch_I83_8tNLotzUStZWc68tAjVTfAwCLcBGAs/s320/P1020145.JPG]]

[img[https://1.bp.blogspot.com/-5W30RBtaCAg/XTWtbscFrqI/AAAAAAAAG_w/Pnscp2DEWnAkFHWGdjYS4SR9tKV5NfUhQCLcBGAs/s320/P1020146.JPG]]

[img[https://1.bp.blogspot.com/-74233FztJ8g/XTWtf7NGveI/AAAAAAAAG_8/KozSVyRJYqw5o7qDIaAVW-huJ5FLvLTcACLcBGAs/s320/P1020148.JPG]]

[img[https://1.bp.blogspot.com/-PP8EXbQcS9A/XTWtl84C6HI/AAAAAAAAHAM/TEF5ac6ZW6wJRRJTQFQhdB0A8qNArPI1wCLcBGAs/s320/P1020153.JPG]]
<<TabsTitleToC>>
/*Headings*/


h1 {
  display: block;
  font-size: 2.25em;
  margin-top: 2em;
  margin-bottom: .05em;
  margin-left: 0;
  margin-right: 0;
  font-weight: 600;
}

h2 {
  display: block;
  font-size: 2em;
  margin-top: 1.5em;
  margin-bottom: .05em;
  margin-left: 0;
  margin-right: 0;
  font-weight: 600;
}

h3 {
  display: block;
  font-size: 1.75em;
  margin-top: 1.25em;
  margin-bottom: .05em;
  margin-left: 0;
  margin-right: 0;
  font-weight: 600;
}

h4 {
  display: block;
  font-size: 1.5em;
  margin-top: 1em;
  margin-bottom: .05em;
  margin-left: 0;
  margin-right: 0;
  font-weight: 550;
}

h5 {
  display: block;
  font-size: 1.25em;
  margin-top: .75em;
  margin-bottom: .05em;
  margin-left: 0;
  margin-right: 0;
  font-weight: 500;
}

h6 {
  display: block;
  font-size: 1em;
  margin-top: .5em;
  margin-bottom: .05em;
  margin-left: 0;
  margin-right: 0;
  font-weight: 450;
}


/*COLUMNS*/

.twocolumns { display:block;
column-count:2;
-moz-column-count:2;
-webkit-column-count:2;}

.threecolumns { display:block;
column-count:3;
-moz-column-count:3;
-webkit-column-count:3;}

.fourcolumns { display:block;
column-count:4;
-moz-column-count:4;
-webkit-column-count:4;}

.fivecolumns { display:block;
column-count:5;
-moz-column-count:5;
-webkit-column-count:5;}

\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Personal:Journal]]
<<multilevel-toc-expandable tag:"Personal:Journal" stateTiddler:"state_Personal:Journal">>
//“Success seems to be connected with action. Successful men keep moving. They make mistakes, but they don’t quit”//<br>''Conrad Hilton''

---

<br>//Never attribute to ''malice'' that which can be adequately explained by ''stupidity'', but don’t rule out ''malice''.//<br>//Never assume ''malice'' when ''stupidity'' will suffice.//<br>//Never assume ''stupidity'' when ''ignorance'' will suffice.//<br>//Never assume ''ignorance'' when forgivable ''error'' will suffice.//<br>//Never assume ''error'' when lack of ''information'' will suffice.//

---


[img[Calvin & Hobbes Personal Development.image]]
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Personal:Reading]]
<<multilevel-toc-expandable tag:"Personal:Reading" stateTiddler:"state_Personal:Reading">>
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]

[[✒|Personal:Software]]

<<multilevel-toc-expandable tag:"Personal:Software" stateTiddler:"state_Personal:Software">>
{{Chaos Pestilaan-class Light Cruiser}}
;Notes
:Primary Character

;Skill Path
:[[Eve:Basic Skill Plan]]
:[[Eve:Shield Tanking Skill Plan]]
:[[Eve:Armor Tanking Skill Plan]]
:[[Eve:Orca Skill Plan]]
:[[Eve:Exploration Skill Plan]]
:[[Eve:Salvaging Skill Plan]]



;Skills
```
Advanced Drone Avionics 1
Afterburner 3
Amarr Cruiser 5
Amarr Destroyer 3
Amarr Frigate 3
CPU Management 3
Capacitor Emission Systems 3
Capacitor Management 4
Drones 5
Electronic Warfare 4
Energy Grid Upgrades 5
Gallente Drone Specialization 1
Gunnery 2
Heavy Assault Cruisers 1
Heavy Assault Missile Specialization 1
Heavy Assault Missiles 5
High Speed Maneuvering 4
Hull Upgrades 5
Light Drone Operation 5
Light Missiles 3
Mechanics 1
Medium Drone Operation 5
Missile Bombardment 4
Missile Launcher Operation 4
Navigation 3
Power Grid Management 3
Propulsion Jamming 2
Science 2
Spaceship Command 5
Weapon Upgrades 5
Fuel Conservation I
Negotiation I
Diplomacy I
Diplomacy II
Fuel Conservation II
Negotiation II
Mining Connections I
Distribution Connections I
Security Connections I
Connections I
Criminal Connections I
Mining Connections II
Distribution Connections II
Security Connections II
Connections II
Criminal Connections II
Diplomacy III
Fuel Conservation III
Negotiation III
Mining Connections III
Distribution Connections III
Security Connections III
Connections III
Criminal Connections III
Gas Cloud Harvesting I
Gas Cloud Harvesting II
Gas Cloud Harvesting III
Gas Cloud Harvesting IV
Fast Talk I
Fast Talk II
Fast Talk III
Diplomacy IV
Advanced Weapon Upgrades I
Advanced Weapon Upgrades II
Advanced Weapon Upgrades III
Fuel Conservation IV
Negotiation IV
Mining Connections IV
Distribution Connections IV
Security Connections IV
Connections IV
Criminal Connections IV
Fast Talk IV
Afterburner V
Amarr Drone Specialization III
Minmatar Drone Specialization III
Gallente Drone Specialization III
Amarr Drone Specialization IV
Minmatar Drone Specialization IV
Gallente Drone Specialization IV
Gas Cloud Harvesting V
Social V
Diplomacy V
Advanced Weapon Upgrades IV
Weapon Upgrades V
Evasive Maneuvering V
Fuel Conservation V
Negotiation V
Mining Connections V
Distribution Connections V
Security Connections V
Deep Core Mining III
Deep Core Mining IV
Connections V
Criminal Connections V
Mining Upgrades V
Salvage Drone Operation V
Acceleration Control V
Fast Talk V
High Speed Maneuvering V
Drone Interfacing V
Amarr Drone Specialization V
Minmatar Drone Specialization V
Gallente Drone Specialization V
Caldari Drone Specialization V
Advanced Drone Avionics V
Drone Durability V
Deep Core Mining V
Advanced Weapon Upgrades V
Armor Layering I
Armor Layering II
Shield Compensation I
Shield Compensation II
Shield Compensation III
Armor Layering III
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Compensation IV
Armor Layering IV
Repair Systems V
Shield Upgrades V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Compensation V
Armor Layering V
Magnetometric Sensor Compensation I
Magnetometric Sensor Compensation II
Magnetometric Sensor Compensation III
Magnetometric Sensor Compensation IV
Signature Analysis V
Command Burst Specialist III
Command Burst Specialist IV
Magnetometric Sensor Compensation V
Command Burst Specialist V
Astrometric Acquisition I
Astrometric Acquisition II
Survey IV
Astrometric Acquisition III
Astrometric Pinpointing I
Astrometric Pinpointing II
Astrometric Pinpointing III
Astrometric Acquisition IV
Astrometric Pinpointing IV
Survey V
Astrometric Rangefinding IV
Propulsion Jamming V
Astrometric Acquisition V
Astrometric Pinpointing V
Cloaking V
Astrometric Rangefinding V
Resistance Phasing I
Resistance Phasing II
Resistance Phasing III
Resistance Phasing IV
Capital Repair Systems I
Capital Repair Systems II
Capital Repair Systems III
Capital Repair Systems IV
Resistance Phasing V
Micro Jump Drive Operation V
Capital Ships III
Capital Ships IV
Capital Repair Systems V
Capital Shield Operation V
Capital Ships V
```
;Skill Plan

```
Advanced Drone Avionics 1
Afterburner 3
Amarr Cruiser 5
Amarr Destroyer 3
Amarr Frigate 3
CPU Management 3
Capacitor Emission Systems 3
Capacitor Management 4
Drones 5
Electronic Warfare 4
Energy Grid Upgrades 5
Gallente Drone Specialization 1
Gunnery 2
Heavy Assault Cruisers 1
Heavy Assault Missile Specialization 1
Heavy Assault Missiles 5
High Speed Maneuvering 4
Hull Upgrades 5
Light Drone Operation 5
Light Missiles 3
Mechanics 1
Medium Drone Operation 5
Missile Bombardment 4
Missile Launcher Operation 4
Navigation 3
Power Grid Management 3
Propulsion Jamming 2
Science 2
Spaceship Command 5
Weapon Upgrades 5
Repair Systems I
Shield Operation I
Fuel Conservation I
Acceleration Control I
Repair Systems II
Shield Operation II
Evasive Maneuvering II
Fuel Conservation II
Shield Management II
Tactical Shield Manipulation II
Acceleration Control II
High Speed Maneuvering II
Warp Drive Operation III
Repair Systems III
Shield Operation III
Evasive Maneuvering III
Fuel Conservation III
Shield Management III
Tactical Shield Manipulation III
Acceleration Control III
Spaceship Command IV
Navigation IV
Micro Jump Drive Operation I
Micro Jump Drive Operation II
Afterburner IV
Mechanics IV
High Speed Maneuvering III
Micro Jump Drive Operation III
Warp Drive Operation IV
Repair Systems IV
Shield Operation IV
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
Hull Upgrades IV
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
Resistance Phasing I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
Resistance Phasing II
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
Resistance Phasing III
Evasive Maneuvering IV
Fuel Conservation IV
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Management IV
Resistance Phasing IV
Tactical Shield Manipulation IV
Acceleration Control IV
Power Grid Management V
High Speed Maneuvering IV
Micro Jump Drive Operation IV
Spaceship Command V
Advanced Spaceship Command I
Advanced Spaceship Command II
Advanced Spaceship Command III
Advanced Spaceship Command IV
Navigation V
Afterburner V
Mechanics V
Warp Drive Operation V
Repair Systems V
Shield Operation V
Hull Upgrades V
Capital Repair Systems I
Capital Repair Systems II
Capital Repair Systems III
Capital Repair Systems IV
Evasive Maneuvering V
Fuel Conservation V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Management V
Capital Shield Operation I
Capital Shield Operation II
Capital Shield Operation III
Capital Shield Operation IV
Resistance Phasing V
Tactical Shield Manipulation V
Acceleration Control V
High Speed Maneuvering V
Micro Jump Drive Operation V
Advanced Spaceship Command V
Capital Ships I
Capital Ships II
Capital Ships III
Capital Ships IV
Capital Repair Systems V
Capital Shield Operation V
Capital Ships V
```

<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://www.tinkercad.com/things/6b1i8uRH0cX-pill-bottle-bottom-end-piece-for-painting-handle/edit"></iframe>
!! For Piet and Pieter-Michiel Wolfgang

```
Remote Sensing I
Interplanetary Consolidation I
Command Center Upgrades I
Remote Sensing II
Interplanetary Consolidation II
Command Center Upgrades II
Remote Sensing III
Planetology I
Planetology II
Planetology III
Interplanetary Consolidation III
Command Center Upgrades III
Remote Sensing IV
Planetology IV
Advanced Planetology I
Advanced Planetology II
Advanced Planetology III
Interplanetary Consolidation IV
Command Center Upgrades IV
Advanced Planetology IV
Remote Sensing V
Planetology V
Interplanetary Consolidation V
Command Center Upgrades V
Advanced Planetology V
```

!! Todo List
;Tutorial
:https://kookma.github.io/TW-Todolist/#Todolist%20Tutorial
;Topbar
:http://tw5topleft.tiddlyspot.com/

;Move sidebar to the left
:https://ibnishak.github.io/Tesseract/UI/leftsidebar.html
:[[Leftbar]]

;Relink tiddlers after changing title of tiddler
:https://flibbles.github.io/tw5-relink/





;Ship Fitting
```
[Porpoise, Neptune]

Inertial Stabilizers II
Inertial Stabilizers II

Multispectrum Shield Hardener II
Medium Shield Extender II
10MN Afterburner II
Burst Jammer II

Shield Command Burst II
Auto Targeting System I
Salvager II
Improved Cloaking Device II

Medium Drone Mining Augmentor II
Medium Drone Mining Augmentor II
Medium Drone Mining Augmentor I


'Augmented' Ice Harvesting Drone x1
'Augmented' Mining Drone x5
Hammerhead II x5


Active Shielding Charge x1000
Shield Extension Charge x1000
Shield Harmonizing Charge x1000
```

;Skills Required
```
Afterburner 4
CPU Management 4
Cloaking 3
Drones 5
Electronic Warfare 4
Gallente Drone Specialization 1
Hull Upgrades 2
Ice Harvesting 4
Ice Harvesting Drone Operation 5
Ice Harvesting Drone Specialization 1
Industrial Command Ships 1
Leadership 5
Mechanics 3
Medium Drone Operation 5
Mining 4
Mining Director 1
Mining Drone Operation 5
Mining Drone Specialization 1
Mining Foreman 5
Navigation 1
ORE Industrial 3
Power Grid Management 3
Salvaging 5
Science 1
Shield Command 5
Shield Command Specialist 1
Shield Upgrades 4
Spaceship Command 5
Survey 3
Tactical Shield Manipulation 4
Target Management 1

```
;For the weak character to run shield support for the main hitters
```
[Porpoise, Porpoise fit]

Inertial Stabilizers II
Inertial Stabilizers II

Multispectrum Shield Hardener II
Medium Shield Extender II
Medium Shield Extender II
Medium Shield Extender II

Shield Command Burst II, Active Shielding Charge
Shield Command Burst II, Shield Extension Charge
Shield Command Burst II, Shield Harmonizing Charge
Small Tractor Beam I

Medium Command Processor I
Medium Core Defense Field Extender II
Medium Core Defense Field Extender II


Salvage Drone I x5
```
;Notepad case
: Look to see if I can print a case for a standard 3x5 PostIt notepad and pen.
[img[Print n Play Games.image]]

; Source
: https://www.printplaygames.com/product/0-75-squares/
!! Vulcan

```
Jury Rigging I
Industry II
Jury Rigging II
Industry III
Mass Production I
Advanced Industry I
Mass Production II
Advanced Industry II
Mass Production III
Jury Rigging III
Armor Rigging I
Astronautics Rigging I
Drones Rigging I
Electronic Superiority Rigging I
Projectile Weapon Rigging I
Energy Weapon Rigging I
Hybrid Weapon Rigging I
Launcher Rigging I
Shield Rigging I
Armor Rigging II
Astronautics Rigging II
Drones Rigging II
Electronic Superiority Rigging II
Projectile Weapon Rigging II
Energy Weapon Rigging II
Hybrid Weapon Rigging II
Launcher Rigging II
Shield Rigging II
Advanced Industry III
Armor Rigging III
Astronautics Rigging III
Drones Rigging III
Electronic Superiority Rigging III
Projectile Weapon Rigging III
Energy Weapon Rigging III
Hybrid Weapon Rigging III
Launcher Rigging III
Shield Rigging III
Industry IV
Mass Production IV
Supply Chain Management I
Supply Chain Management II
Supply Chain Management III
Jury Rigging IV
Supply Chain Management IV
Advanced Industry IV
Armor Rigging IV
Astronautics Rigging IV
Drones Rigging IV
Electronic Superiority Rigging IV
Projectile Weapon Rigging IV
Energy Weapon Rigging IV
Hybrid Weapon Rigging IV
Launcher Rigging IV
Shield Rigging IV
Industry V
Mass Production V
Advanced Mass Production I
Advanced Mass Production II
Advanced Mass Production III
Advanced Mass Production IV
Supply Chain Management V
Advanced Industry V
Advanced Mass Production V
Advanced Small Ship Construction I
Advanced Industrial Ship Construction I
Advanced Small Ship Construction II
Advanced Industrial Ship Construction II
Advanced Small Ship Construction III
Advanced Industrial Ship Construction III
Advanced Small Ship Construction IV
Advanced Medium Ship Construction I
Advanced Medium Ship Construction II
Advanced Medium Ship Construction III
Advanced Industrial Ship Construction IV
Advanced Medium Ship Construction IV
Advanced Large Ship Construction I
Advanced Large Ship Construction II
Advanced Large Ship Construction III
Advanced Large Ship Construction IV
Advanced Small Ship Construction V
Advanced Industrial Ship Construction V
Advanced Medium Ship Construction V
Advanced Large Ship Construction V
Mechanics IV
Science V
Mechanics V
Amarr Starship Engineering I
Caldari Starship Engineering I
Gallente Starship Engineering I
Minmatar Starship Engineering I
Capital Ship Construction I
Amarr Starship Engineering II
Caldari Starship Engineering II
Gallente Starship Engineering II
Minmatar Starship Engineering II
Capital Ship Construction II
Amarr Starship Engineering III
Caldari Starship Engineering III
Gallente Starship Engineering III
Minmatar Starship Engineering III
Capital Ship Construction III
Amarr Starship Engineering IV
Caldari Starship Engineering IV
Gallente Starship Engineering IV
Minmatar Starship Engineering IV
Capital Ship Construction IV
Amarr Starship Engineering V
Caldari Starship Engineering V
Gallente Starship Engineering V
Minmatar Starship Engineering V
Capital Ship Construction V
```
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Punchlist]]
<<multilevel-toc-expandable tag:"Punchlist" stateTiddler:"state_Punchlist">>
<div style="clear: both;"></div><<image-left "Pz II Contrast Paint Base.01.20200929" caption:"^^//Pz II Contrast Paint Base//^^"  width:"400px">>

Another method I am trying to use is with Contrast Paints as the dark base shade and then a wet brush of the actual tank paint color. After that maybe a highlight brush.

I will then have to see which way I prefer.

<div style="clear: both;">

---
{{Imperial Ramilies-class Starfort}}
{{Tyranid Razorfiend-class Cruiser}}
;Sources
:https://www.bluerailhobbies.com/products/100-160-32901?variant=31387354726459
:[img[SceneScapes(TM) Grass Mat -- Green - 100 x 50" 254 x 127cm.image.png]]
<<timeline limit:30 format:"DD mmm">>
<<tabs "[tag[Recreational Vehicles]!sort[modified]]">>
f2(8�X����7n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST���X�yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847nX;ST�����yT�����yT�����yT����t6r f_000184;ST�����yT�����yT�����yT����t6r f_000184;ST�����yT�����yT�����yT����t6r f_000184;ST�����yT�����yT�����yT����t6r f_000184;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT���X�yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n;ST�����yT�����yT�����yT����t6r f_0001847n�&V�����NV���X�NV�����NV����z�y f_000185�ihR7n^W�����W�����W�����W�����~ f_000186�ihR7n4������-Ǹ����-Ǹ����-Ǹ������� f_000187�ihR7n�s��������������������������0X. f_000188�ihR7n�������m������m������m�����="9 f_000189�ihR7n�4���XFOR����FOR����FOR���� f_00018a�ihR7n5ٺ��TJٺ��TJٺ��TJٺ��0m/ f_00018b�ihR7n�Vٺ��R�Xٺ��R�Xٺ��R�Xٺ��, f_00018chR7n�pٺ����pٺ����pٺ����pٺ��n�l f_00018djhR7n�a�ٺ�����ٺ�����ٺ�����ٺ����� f_00018efihR7nX<��ٺ�� #�ٺ�� #�ٺ�� #�ٺ����� f_00018fjhR7n�ɿݺ���ɿݺ���ɿݺ���ɿݺ��P�O f_000190jhR7n�7�ݺ���^�ݺ���^�ݺ���^�ݺ��L'K f_000191 jhR7nZ�޺��6޺��6޺��6޺��H�G f_000192" title="ReMarkable Syntax Sheet.tid">

{{Chaos Repulsive-class Grand Cruiser}}
!! For all Characters After Core but before Specialty

```
Mining Upgrades I
Mining Upgrades II
Mining Upgrades III
Mining IV
Ice Harvesting I
Gas Cloud Harvesting I
Astrogeology I
Ice Harvesting II
Gas Cloud Harvesting II
Astrogeology II
Ice Harvesting III
Gas Cloud Harvesting III
Astrogeology III
Ice Harvesting IV
Gas Cloud Harvesting IV
Astrogeology IV
Mining Upgrades IV
Mining V
Ice Harvesting V
Gas Cloud Harvesting V
Astrogeology V
Deep Core Mining I
Deep Core Mining II
Deep Core Mining III
Deep Core Mining IV
Mining Upgrades V
Deep Core Mining V

```
!! For Vulcan Wolfgang

```
Reprocessing I
Metallurgy I
Industry II
Reprocessing II
Metallurgy II
Industry III
Mass Production I
Mass Production II
Reprocessing III
Mass Production III
Metallurgy III
Reprocessing IV
Plagioclase Processing I
Pyroxeres Processing I
Scordite Processing I
Veldspar Processing I
Reprocessing Efficiency I
Plagioclase Processing II
Pyroxeres Processing II
Scordite Processing II
Veldspar Processing II
Reprocessing Efficiency II
Plagioclase Processing III
Pyroxeres Processing III
Scordite Processing III
Veldspar Processing III
Reprocessing Efficiency III
Plagioclase Processing IV
Pyroxeres Processing IV
Scordite Processing IV
Veldspar Processing IV
Mass Production IV
Reprocessing Efficiency IV
Dark Ochre Processing I
Gneiss Processing I
Hedbergite Processing I
Spodumain Processing I
Dark Ochre Processing II
Gneiss Processing II
Hedbergite Processing II
Spodumain Processing II
Dark Ochre Processing III
Gneiss Processing III
Hedbergite Processing III
Spodumain Processing III
Metallurgy IV
Dark Ochre Processing IV
Gneiss Processing IV
Hedbergite Processing IV
Spodumain Processing IV
Science V
Power Grid Management V
Hydromagnetic Physics I
Hydromagnetic Physics II
Hydromagnetic Physics III
Hydromagnetic Physics IV
Reprocessing V
Hemorphite Processing I
Jaspet Processing I
Kernite Processing I
Omber Processing I
Hemorphite Processing II
Jaspet Processing II
Kernite Processing II
Omber Processing II
Hemorphite Processing III
Jaspet Processing III
Kernite Processing III
Omber Processing III
Hemorphite Processing IV
Jaspet Processing IV
Kernite Processing IV
Omber Processing IV
Plagioclase Processing V
Pyroxeres Processing V
Scordite Processing V
Veldspar Processing V
Hemorphite Processing V
Jaspet Processing V
Kernite Processing V
Omber Processing V
Mass Production V
Advanced Mass Production I
Advanced Mass Production II
Advanced Mass Production III
Advanced Mass Production IV
Industrial Reconfiguration I
Industrial Reconfiguration II
Industrial Reconfiguration III
Industrial Reconfiguration IV
Reprocessing Efficiency V
Arkonor Processing I
Bistot Processing I
Crokite Processing I
Mercoxit Processing I
Ice Processing I
Arkonor Processing II
Bistot Processing II
Crokite Processing II
Mercoxit Processing II
Ice Processing II
Arkonor Processing III
Bistot Processing III
Crokite Processing III
Mercoxit Processing III
Ice Processing III
Arkonor Processing IV
Bistot Processing IV
Crokite Processing IV
Mercoxit Processing IV
Ice Processing IV
Metallurgy V
Scrapmetal Processing I
Scrapmetal Processing II
Scrapmetal Processing III
Scrapmetal Processing IV
Dark Ochre Processing V
Gneiss Processing V
Hedbergite Processing V
Spodumain Processing V
Arkonor Processing V
Bistot Processing V
Crokite Processing V
Mercoxit Processing V
Scrapmetal Processing V
Ice Processing V
Industrial Reconfiguration V
```
{{Chaos Retaliator-class Grand Cruiser}}
{{Imperial Retribution-class Battleship}}
Rogue Traders, originally called Rogue Traders Militant during the era of the Great Crusade and the Horus Heresy, are unique and powerful Human individuals who serve as a combination freelance explorer, conquistador and interstellar merchant for the Imperium of Man.

They are hereditary Imperial servants and nobles, given a starship, a crew, and sometimes a contingent of Space Marines (in very rare cases) or troops of the Astra Militarum and carte blanche to roam those worlds of the galaxy that still lie beyond Imperial control or knowledge.

In their task of exploring and exploiting the still-uncharted regions of the galaxy for Mankind, Rogue Traders might come across worlds harbouring long-forgotten Human civilisations which will be later incorporated into the Imperium by official Adeptus Mechanicus Explorator fleets and expeditions of the Imperial Navy and Astra Militarum.

Other times they find empty or alien-dominated planets ripe for colonisation, conquest or exploitation by the Imperium -- and themselves.

The bearer of a sacred Warrant of Trade that empowers them to journey beyond the boundaries of the Imperium to trade, explore, and make war in the God-Emperor's name, a Rogue Trader is a unique figure in the grim darkness of the Imperium.

They may be a newly entitled power on the rise or hail from a long lineage of nobles and voidfarers, but all bear their titles with pride, striking out into the unknown in search of fortune and glory.

A Rogue Trader is a power unto themselves in the dark voids, master of all they survey -- at least as far as their force of arms and sharpness of wits can press the claim.

A Rogue Trader can be many things but whether standing as diplomat before a planetary ruler, cutting a shadowed deal in a void station undercity, bellowing orders amidst an armed host set upon plunder, or striding the bridge of a mighty starship, they remain one thing above all -- free.

Often, Rogue Traders come from a dynasty of great leaders and visionary commanders, with a renowned (or darkly infamous) lineage stretching back standard millennia. Other times, they are from younger, more dynamic families, often coming from the ranks of the Adeptus Terra, the Imperial Navy, or the Astra Militarum.

Whatever their origins, all Rogue Traders are first and foremost masters of their own fates, and upon their shoulders can rest the success or failure not only of their endeavours and their bloodlines, but of countless future generations and, often, the fortunes of entire worlds.

Despite the fact that the weight of such responsibility is theirs to bear alone, a Rogue Trader invariably surrounds themself with a coterie of allies and retainers. No Rogue Trader can undertake their mission alone, for no man or woman can be master of every single aspect of trade, exploration, exploitation, and war.

As a result, all of the most successful Rogue Traders have the ingrained ability to recognise the value of others and their motivations and, as a leader, are able to utilise every weapon and ability in the Human arsenal to their full potential.

Though they must rely on others for the most specialised of skills (not to mention certain needful resources), it falls to the Rogue Trader to know how and when to exercise their own judgement and how to delegate where needed.

They may not steer the helm of their void cruiser, nor fire and aim every Macrocannon in person, but the Rogue Trader selects and commands those who do and it is their orders that are obeyed.

Likewise they may know little of the arcane rites of the Augury and Auspex, but it is ultimately their decision whether or not to trust the word of the Explorator who claims it safe to breathe the air of a newly discovered world.

Rogue Traders must always look to their own abilities and protection, regardless of the power of their allies, for there will always be those envious of their power and station, and countless rivals to their goals. As a result, most have a penchant for the very finest personal weapons and equipment their fortunes can acquire -- for even friends can soon become enemies when a world's ransom is at stake.

Some never leave their bridge without donning an ancient and revered suit of Artificer Armour, while others secret fiendishly cunning personal force field generators of alien manufacture beneath a gaudy uniform. None are ever unarmed, bearing, even aboard their own vessels, minute Digital Weapons and other implements of destruction.

However they outwardly comport themselves, Rogue Traders must be supremely confident in their own abilities, and able to walk away from even the most desperate situation somehow having profited from their perilous adventure, even if that profit must be counted purely by survival. 
;Fitting

```
[Rokh, The Timeless Rokh'N'Roll PVE]

Tracking Enhancer II
Damage Control II
Magnetic Field Stabilizer II
Magnetic Field Stabilizer II
Magnetic Field Stabilizer II

Tracking Computer II
Multispectrum Shield Hardener II
Multispectrum Shield Hardener II
Large Shield Extender II
Large Micro Jump Drive
X-Large Ancillary Shield Booster, Navy Cap Booster 400

425mm Railgun II
425mm Railgun II
425mm Railgun II
425mm Railgun II
425mm Railgun II
425mm Railgun II
425mm Railgun II
425mm Railgun II

Large Processor Overclocking Unit I
Large Core Defense Field Extender I
Large Core Defense Field Extender I
```

;Skills

```
Caldari Battlecruiser 3
Caldari Battleship 1
Caldari Cruiser 3
Caldari Destroyer 3
Caldari Frigate 3
Gunnery 5
Hull Upgrades 4
Large Hybrid Turret 5
Large Railgun Specialization 1
Mechanics 1
Medium Hybrid Turret 3
Micro Jump Drive Operation 1
Navigation 4
Power Grid Management 3
Science 1
Sharpshooter 5
Shield Operation 4
Shield Upgrades 4
Small Hybrid Turret 3
Spaceship Command 4
Tactical Shield Manipulation 4
Trajectory Analysis 4
Warp Drive Operation 2
Weapon Upgrades 4


```
;Fit

```
[Rokh, Rokh Boomer]

Capacitor Power Relay II
Capacitor Power Relay II
Capacitor Power Relay II
Capacitor Power Relay II
Capacitor Power Relay II

Large Micro Jump Drive
Large Shield Extender II
Thermal Shield Hardener II
Kinetic Shield Hardener II
Cap Recharger II
Cap Recharger II

Large Graviton Smartbomb II
Large Graviton Smartbomb II
Large Graviton Smartbomb II
Large Graviton Smartbomb II
Large Plasma Smartbomb II
Large Plasma Smartbomb II
Large Plasma Smartbomb II
Large Plasma Smartbomb II

Large Capacitor Control Circuit II
Large Capacitor Control Circuit II
Large Capacitor Control Circuit I


Garde II x2
```

;Skills Required
```
Caldari Battlecruiser 3
Caldari Battleship 1
Caldari Cruiser 3
Caldari Destroyer 3
Caldari Frigate 3
Drone Interfacing 4
Drone Sharpshooting 4
Drones 5
Energy Grid Upgrades 4
Energy Pulse Weapons 5
Gallente Drone Specialization 1
Micro Jump Drive Operation 1
Navigation 4
Power Grid Management 3
Science 2
Sentry Drone Interfacing 5
Shield Upgrades 4
Spaceship Command 4
Tactical Shield Manipulation 4
Warp Drive Operation 2

```
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Role Playing Games]]
<<multilevel-toc-expandable tag:"Role Playing Games" stateTiddler:"state_Role Playing Games">>


```
[Sacrilege, DOC: Main_Sacri_AM]
Multispectrum Energized Membrane II
Thermal Armor Hardener II
Ballistic Control System II
1600mm Steel Plates II
Assault Damage Control II

50MN Microwarpdrive II
Warp Scrambler II
Missile Guidance Computer II
Fleeting Compact Stasis Webifier

Heavy Assault Missile Launcher II
Heavy Assault Missile Launcher II
Heavy Assault Missile Launcher II
Heavy Assault Missile Launcher II
Heavy Assault Missile Launcher II
Small Energy Neutralizer II

Medium Trimark Armor Pump II
Medium Trimark Armor Pump II



Hobgoblin II x5
Hammerhead II x5
Hornet EC-300 x5

Caldari Navy Nova Heavy Assault Missile x125
Caldari Navy Inferno Heavy Assault Missile x240
Inferno Javelin Heavy Assault Missile x2000
Missile Range Script x1
Missile Precision Script x1
Caldari Navy Scourge Heavy Assault Missile x1604
Caldari Navy Mjolnir Heavy Assault Missile x625
Nanite Repair Paste x50




```

;Skills Required
```
Advanced Drone Avionics 1
Afterburner 3
Amarr Cruiser 5
Amarr Destroyer 3
Amarr Frigate 3
CPU Management 3
Capacitor Emission Systems 3
Capacitor Management 4
Drones 5
Electronic Warfare 4
Energy Grid Upgrades 5
Gallente Drone Specialization 1
Gunnery 2
Heavy Assault Cruisers 1
Heavy Assault Missile Specialization 1
Heavy Assault Missiles 5
High Speed Maneuvering 4
Hull Upgrades 5
Light Drone Operation 5
Light Missiles 3
Mechanics 1
Medium Drone Operation 5
Missile Bombardment 4
Missile Launcher Operation 4
Navigation 3
Power Grid Management 3
Propulsion Jamming 2
Science 2
Spaceship Command 5
Weapon Upgrades 5


```
; Source
: https://fi.google.com/about/phones/samsung-galaxy-s20-5g

;1 Bn. Black Watch 
:(red hackle on the Foreign Service helmet)
:Blue over Khaki

;1 Bn. Berkshire Regiment
:Blue over Khaki

;2 Bn. Royal Irish Fusiliers 
:(Indian Khaki Service Dress)
{{Imperial Scapula-class Deep Space Fighter}}
* Make IRL from this website

https://scarybiscuitsstudios.blogspot.com/

{{Imperial Sceptre-class Minekeeper}}
!! Pieter-Michiel, then Vulcan, or have Vulcan do the advanced Racial Types first

```
Research I
Laboratory Operation I
Metallurgy I
Research II
Laboratory Operation II
Metallurgy II
Research III
Laboratory Operation III
Metallurgy III
Research IV
Laboratory Operation IV
Scientific Networking I
Scientific Networking II
Scientific Networking III
Metallurgy IV
Scientific Networking IV
Science V
Research V
Laboratory Operation V
Advanced Laboratory Operation I
Advanced Laboratory Operation II
Advanced Laboratory Operation III
Advanced Laboratory Operation IV
Metallurgy V
Scientific Networking V
Advanced Laboratory Operation V
Sleeper Encryption Methods I
Sleeper Encryption Methods II
Sleeper Encryption Methods III
Mechanics IV
Sleeper Encryption Methods IV
Power Grid Management V
Hydromagnetic Physics I
High Energy Physics I
Quantum Physics I
Graviton Physics I
Laser Physics I
Plasma Physics I
Nuclear Physics I
Hydromagnetic Physics II
High Energy Physics II
Quantum Physics II
Graviton Physics II
Laser Physics II
Plasma Physics II
Nuclear Physics II
Hydromagnetic Physics III
High Energy Physics III
Quantum Physics III
Graviton Physics III
Laser Physics III
Plasma Physics III
Nuclear Physics III
CPU Management V
Nanite Engineering I
Electronic Engineering I
Electromagnetic Physics I
Nanite Engineering II
Electronic Engineering II
Electromagnetic Physics II
Nanite Engineering III
Electronic Engineering III
Electromagnetic Physics III
Nanite Engineering IV
Defensive Subsystem Technology I
Defensive Subsystem Technology II
Defensive Subsystem Technology III
Hydromagnetic Physics IV
High Energy Physics IV
Core Subsystem Technology I
Core Subsystem Technology II
Core Subsystem Technology III
Quantum Physics IV
Graviton Physics IV
Propulsion Subsystem Technology I
Propulsion Subsystem Technology II
Propulsion Subsystem Technology III
Electronic Engineering IV
Electronic Subsystem Technology I
Electronic Subsystem Technology II
Electronic Subsystem Technology III
Electromagnetic Physics IV
Laser Physics IV
Plasma Physics IV
Nuclear Physics IV
Defensive Subsystem Technology IV
Electronic Subsystem Technology IV
Core Subsystem Technology IV
Propulsion Subsystem Technology IV
Mechanics V
Mechanical Engineering I
Molecular Engineering I
Rocket Science I
Mechanical Engineering II
Molecular Engineering II
Rocket Science II
Mechanical Engineering III
Molecular Engineering III
Rocket Science III
Mechanical Engineering IV
Molecular Engineering IV
Rocket Science IV
Sleeper Encryption Methods V
Nanite Engineering V
Hydromagnetic Physics V
High Energy Physics V
Quantum Physics V
Graviton Physics V
Electronic Engineering V
Electromagnetic Physics V
Laser Physics V
Mechanical Engineering V
Molecular Engineering V
Plasma Physics V
Rocket Science V
Nuclear Physics V
Defensive Subsystem Technology V
Electronic Subsystem Technology V
Core Subsystem Technology V
Propulsion Subsystem Technology V
```
```

Reprocessing I
Energy Pulse Weapons I
Metallurgy I
Reprocessing II
Energy Pulse Weapons II
Metallurgy II
Reprocessing III
Energy Pulse Weapons III
Metallurgy III
Reprocessing IV
Reprocessing Efficiency I
Reprocessing Efficiency II
Reprocessing Efficiency III
Energy Pulse Weapons IV
Reprocessing Efficiency IV
Metallurgy IV
Energy Pulse Weapons V
Reprocessing Efficiency V
Metallurgy V
Scrapmetal Processing I
Scrapmetal Processing II
Scrapmetal Processing III
Scrapmetal Processing IV
Scrapmetal Processing V
```
{{Necron Scythe-class Reaper Ship}}
;filename:"(2)"
* viscount to an earl serving as the Chancellor of the Exchequer.
* third of three sons and only surviving son.
* served in the military as an Army Intelligence Officer before resigning commission.
* very honorable to friends, but equally deadly.
* outstanding hearing, eyesight, and night sight. Great shot - good swordsman.
* good contacts with the Irish movement, as well.
;Sector
:Gothic Sector

!Fleet Commander

;0-1 Admiral 

You may include 1 Admiral in your fleet, who must be assigned to a ship and improves its Leadership to the value shown. If the fleet is worth over 750 points an Admiral must be included to lead it.

|Fleet-Admiral (Ld 8) | 50 pts |
|Admiral (Ld 9 )  | 100 pts  |
|Solar Admiral (Ld 10) | 150 pts |

Admirals get one Fleet Commander re-roll included in their points cost. If you want more you’ll have to pay for them.

|One extra re-roll | 25 pts  |
|Two extra re-rolls | 75 pts  |
|Three extra re-rolls | 150 pts |

!Capital Ships

!!Battleships 

You may include up to one battleship in your fleet for every three cruisers or battlecruisers.

|[[Imperial Retribution Class Battleship  ]] | 365 pts |
|[[Imperial Emperor Class Battleship ]] | 345 pts  |

!!Battlecruisers 

You may include up to one battlecruiser in your fleet for every two cruisers.

|[[Imperial Mars Class Battlecruier ]] | 270 pts  |
|[[Imperial Overlord Class Battlecruier ]] | 235 pts |

!!Cruisers

;0-12 Cruisers 

|[[Imperial Dictator Class Cruiser ]] | 220 pts  |
|[[Imperial Dominator Class Cruiser ]] | 190 pts  |
|[[Imperial Tyrant Class Cruiser ]] | 185 pts  |
|[[Imperial Lunar Class Cruiser ]] | 180 pts  |
|[[Imperial Gothic Class Cruiser ]] | 180 pts  |
|[[Imperial Dauntless Class Light Cruiser ]] | 110 pts |

Note: Imperial Capital Ships with 6+ prow Armour that mount a prow ram may upgrade it for a Power Ram that imparts +1HP damage in addition to any other hits rolled when ramming for +5 pts.

!!Escorts

You may include any number of Escorts in your fleet.

|[[Imperial Firestorm Class Frigate ]] | 40 pts  |
|[[Imperial Sword Class Frigate ]] | 35 pts  |
|[[Imperial Cobra Class Destroyer ]] | 30 pts |

!Ordnance

Any ship with launch bays may choose to have them launch any mix of Fury interceptors and Starhawk bombers. An Emperor Class Battleship may carry Shark assault boats at an additional cost of +5 points. Ships with torpedo tubes are armed with ordinary torpedoes.
;Sector
:Armageddon Sector

!Fleet Commander

;0-1 Fleet Commander

Your fleet may include a commander to lead it.
If your fleet is worth over 750 points it must include a Fleet Commander

|Fleet-Admiral (Ld 8)  | 50pts |
|Admiral (Ld 9) | 100pts |
|Solar Admiral (Ld 10)  | 150pts |
|Master of the Fleet (Ld 10)  | 50pts |

Your Fleet Commander gets a single re-roll included in his points cost, and may buy more if you wish. The cost of your re-rolls depends on the commander you choose (ie you cannot choose to buy Master of the Fleet re-rolls if your fleet is commanded by an Admiral).

;Admiral Re-rolls

|One extra re-rolls  | 25pts |
|Two extra re-rolls  | 75pts |
|Three extra re-rolls  | 150pts |

;Master of the Fleet Re-rolls

|One extra re-rolls  | 25pts |
|Two extra re-rolls  | 50pts |
|Three extra re-rolls  | 75pts |

Note: Command duties were shared between officers of the Imperial Navy and their Space Marine counterparts throughout the Third Armageddon War. As long as at least one Space Marine Battlebarge is included you may choose a Master of the Fleet, who will always be assigned to a Battlebarge and cannot be assigned to a non-Space Marine ship. As long as the ship includes at least one Imperial capital ship it may include a fleet-admiral, admiral or solar admiral, who will always be assigned to an Imperial Navy vessel and cannot be a assigned to a Space Marine vessel.

!Capital Ships
!!Battleships

;You may include up to one battleship in your fleet for every three battlecruisers or cruisers.

|[[Imperial Emperor Class Battleship]]   | 345pts  |
|[[Imperial Apocalypse Class Battleship]].  | 365pts  |
|[[Imperial Oberon Class Battleship]]  | 335pts |
|[[Space Marine Battlebarge]]* | 425pts |

*Space Marine vessels may not be squadroned with non-Space Marine vessels.

!!Battlecruisers

;You may include up to 1 battlecruiser in your fleet for every cruiser.

|[[Mars Class Battlecruiser]] | 270pts |
|[[Armageddon Class Battlecruiser]]  | 245pts |

!!Cruisers

;0-12 Cruisers

|[[Imperial Lunar Class Cruiser ]] | 180pts |
|[[Imperial Tyrant Class Cruiser  ]] | 185pts |
|[[Imperial Gothic Class Cruiser ]] | 180pts |
|[[Imperial Dictator Class Cruiser ]] | 220pts |
|[[Space Marine Strike Cruiser* ]] | 145pts |
|[[Endeavour Class Light Cruiser ]] | 120pts |
|[[Endurance Class Light Cruiser** ]] | 120pts |
|[[Defiant Class Light Cruiser** ]] | 130pts |

*Space Marine vessels may not be squadroned with non-Space Marine vessels.
**The Endurance and Defiant are rare variants of the Endeavour, and with manufacturing and refitting capabilities at a premium during the Third Armageddon War. the forge world of Voss inevitably produced far more of the Endeavour than either of its variants. For this reason, the combined numbers of Endurance and Defiant class vessels may not exceed the number of Endeavour Class Light Cruisers in the fleet.

!Escorts

;You may include any number of Escorts in your fleet.

|[[Imperial Falchion Class Frigate. ]] | 35pts |
|[[Imperial Firestorm Class Frigate  ]] | 40pts |

;Space Marine Rapid Strike Vessels
|[[Firestorm* ]] | 45pts |
|[[Sword*  ]] | 40pts |
|[[Cobra*  ]] | 35pts |
|[[Hunter Class Destroyer* ]] | 40pts |
|[[Gladius Class Frigate* ]] | 45pts |
|[[Nova Class Frigate* ]] | 50pts |

*Space Marine vessels may not be squadroned with non-Space Marine vessels.

!Ordnance

Any Imperial Navy ship with launch bays may choose to have them launch any mix of Fury interceptors and Starhawk bombers. An Emperor class or Oberon Class Battleship may carry Shark assault boats at an additional cost of + 5 points. Ships with torpedo tubes are armed with ordinary torpedoes.
Space Marine vessels with launch bays carry Thunderhawk Gunships. Space Marine Ships with torpedo tubes are armed with ordinary torpedoes and boarding torpedoes.

!RESERVES
Like other fleets, Armageddon sector fleets can include reserves. However, it is important to note that despite the inclusion of Space Marine vessels in the fleet list, this is still an Imperial Navy fleet and hence may only take reserves from, other Imperial Navy fleets list NOT Space Marine fleet lists. Likewise, Imperial Navy fleets choosing reserves from, this fleet list cannot choose Space Marine vessels from it.

I use this code to create a macro entry to overwrite the existing code in the core.

Copy this code into a tiddler tagged ``$:/core/macros/toc``


```
\define toc-caption()
<$set name="tv-wikilinks" value="no">
  <$transclude tiddler={{!!icon}}/><$transclude field="caption">
    <$view field="title"/>
  </$transclude>
</$set>
\end

\define toc-body(tag,sort:"",itemClassFilter,exclude,path)
<ol class="tc-toc">
  <$list filter="""[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]""">
    <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>
      <$set name="excluded" filter="""[enlist<__exclude__>] [<__tag__>]""">
        <$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item">
          <li class=<<toc-item-class>>>
            <$list filter="[all[current]toc-link[no]]" emptyMessage="<$link><$view field='caption'><$view field='title'/></$view></$link>">
              <<toc-caption>>
            </$list>
            <$macrocall $name="toc-body" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>
          </li>
        </$set>
      </$set>
    </$vars>
  </$list>
</ol>
\end

\define toc(tag,sort:"",itemClassFilter:"")
<$macrocall $name="toc-body"  tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />
\end

\define toc-linked-expandable-body(tag,sort:"",itemClassFilter,exclude,path)
<!-- helper function -->
<$qualify name="toc-state" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>
  <$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item">
    <li class=<<toc-item-class>>>
    <$link>
      <$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
        <$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
          {{$:/core/images/right-arrow}}
        </$button>
      </$reveal>
      <$reveal type="match" stateTitle=<<toc-state>> text="open">
        <$button setTitle=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
          {{$:/core/images/down-arrow}}
        </$button>
      </$reveal>
      <<toc-caption>>
    </$link>
    <$reveal type="match" stateTitle=<<toc-state>> text="open">
      <$macrocall $name="toc-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
    </$reveal>
    </li>
  </$set>
</$qualify>
\end

\define toc-unlinked-expandable-body(tag,sort:"",itemClassFilter,exclude,path)
<!-- helper function -->
<$qualify name="toc-state" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>
  <$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item">
    <li class=<<toc-item-class>>>
      <$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
        <$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
          {{$:/core/images/right-arrow}}
          <<toc-caption>>
        </$button>
      </$reveal>
      <$reveal type="match" stateTitle=<<toc-state>> text="open">
        <$button setTitle=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
          {{$:/core/images/down-arrow}}
          <<toc-caption>>
        </$button>
      </$reveal>
      <$reveal type="match" stateTitle=<<toc-state>> text="open">
        <$macrocall $name="toc-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
      </$reveal>
    </li>
  </$set>
</$qualify>
\end

\define toc-expandable-empty-message()
<$macrocall $name="toc-linked-expandable-body" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>
\end

\define toc-expandable(tag,sort:"",itemClassFilter:"",exclude,path)
<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>
  <$set name="excluded" filter="""[enlist<__exclude__>] [<__tag__>]""">
    <ol class="tc-toc toc-expandable">
      <$list filter="""[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]""">
        <$list filter="[all[current]toc-link[no]]" emptyMessage=<<toc-expandable-empty-message>> >
          <$macrocall $name="toc-unlinked-expandable-body" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter="""itemClassFilter""" exclude=<<excluded>> path=<<path>> />
        </$list>
      </$list>
    </ol>
  </$set>
</$vars>
\end

\define toc-linked-selective-expandable-body(tag,sort:"",itemClassFilter,exclude,path)
<$qualify name="toc-state" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>
  <$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item" >
    <li class=<<toc-item-class>>>
      <$link>
          <$list filter="[all[current]tagging[]$sort$limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>">
          <$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
            <$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
              {{$:/core/images/right-arrow}}
            </$button>
          </$reveal>
          <$reveal type="match" stateTitle=<<toc-state>> text="open">
            <$button setTitle=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
              {{$:/core/images/down-arrow}}
            </$button>
          </$reveal>
        </$list>
        <<toc-caption>>
      </$link>
      <$reveal type="match" stateTitle=<<toc-state>> text="open">
        <$macrocall $name="toc-selective-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
      </$reveal>
    </li>
  </$set>
</$qualify>
\end

\define toc-unlinked-selective-expandable-body(tag,sort:"",itemClassFilter,exclude,path)
<$qualify name="toc-state" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>
  <$set name="toc-item-class" filter=<<__itemClassFilter__>> emptyValue="toc-item-selected" value="toc-item">
    <li class=<<toc-item-class>>>
      <$list filter="[all[current]tagging[]$sort$limit[1]]" variable="ignore" emptyMessage="<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>">
        <$reveal type="nomatch" stateTitle=<<toc-state>> text="open">
          <$button setTitle=<<toc-state>> setTo="open" class="tc-btn-invisible tc-popup-keep">
            {{$:/core/images/right-arrow}}
            <<toc-caption>>
          </$button>
        </$reveal>
        <$reveal type="match" stateTitle=<<toc-state>> text="open">
          <$button setTitle=<<toc-state>> setTo="close" class="tc-btn-invisible tc-popup-keep">
            {{$:/core/images/down-arrow}}
            <<toc-caption>>
          </$button>
        </$reveal>
      </$list>
      <$reveal type="match" stateTitle=<<toc-state>> text="open">
        <$macrocall $name="toc-selective-expandable" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>
      </$reveal>
    </li>
  </$set>
</$qualify>
\end

\define toc-selective-expandable-empty-message()
<$macrocall $name="toc-linked-selective-expandable-body" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>
\end

\define toc-selective-expandable(tag,sort:"",itemClassFilter,exclude,path)
<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>
  <$set name="excluded" filter="""[enlist<__exclude__>] [<__tag__>]""">
    <ol class="tc-toc toc-selective-expandable">
      <$list filter="""[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]""">
        <$list filter="[all[current]toc-link[no]]" variable="ignore" emptyMessage=<<toc-selective-expandable-empty-message>> >
          <$macrocall $name="toc-unlinked-selective-expandable-body" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>
        </$list>
      </$list>
    </ol>
  </$set>
</$vars>
\end

\define toc-tabbed-external-nav(tag,sort:"",selectedTiddler:"$:/temp/toc/selectedTiddler",unselectedText,missingText,template:"")
<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>
  <div class="tc-tabbed-table-of-contents">
    <$linkcatcher to=<<__selectedTiddler__>>>
      <div class="tc-table-of-contents">
        <$macrocall $name="toc-selective-expandable" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter="[all[current]] -[<__selectedTiddler__>get[text]]"/>
      </div>
    </$linkcatcher>
    <div class="tc-tabbed-table-of-contents-content">
      <$reveal stateTitle=<<__selectedTiddler__>> type="nomatch" text="">
        <$transclude mode="block" tiddler=<<__template__>>>
          <h1><<toc-caption>></h1>
          <$transclude mode="block">$missingText$</$transclude>
        </$transclude>
      </$reveal>
      <$reveal stateTitle=<<__selectedTiddler__>> type="match" text="">
        $unselectedText$
      </$reveal>
    </div>
  </div>
</$tiddler>
\end

\define toc-tabbed-internal-nav(tag,sort:"",selectedTiddler:"$:/temp/toc/selectedTiddler",unselectedText,missingText,template:"")
<$linkcatcher to=<<__selectedTiddler__>>>
  <$macrocall $name="toc-tabbed-external-nav" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>
</$linkcatcher>
\end
```
@@.image-float-left
[img width=400 [Shade and Highlight Matilda II.01.20200929]]<br>
[img width=400 [Shade and Highlight Matilda II.02.20200929]]
@@<br>
I am working on the highlights and shading for the Matilda IIs.

I used the airbrush to put down the base layer of [[Vallejo Model Air 71.330 Khaki Green Num 3]]. Then I dry-brushed it with the lighter shade in the British Armor pack which was the [[Vallejo Model Air 71.284 UK Light Mud]]. I then used a wash of [[Agthrax Earth Shade]] at a 50/50 with [[Contrast Medium]].

I really like the effect that the Earthshade did in blending down the highlight which popped the otherwise dark green.



<div style="clear: both;">

---
{{Eldar Shadow-class Cruiser}}
{{Eldar Shadowhunter-class Escort}}
;Source
:https://wh40k.lexicanum.com/wiki/Imperial_Navy_Vessels_(List)

Logo
SCHOLA PROGENIUM

SCHOLA
NEWS
40KRP
LIBRARY
FICTION
LINKS
LEGAL

A ¦ B ¦ C ¦ D ¦ E ¦ F ¦ G ¦ H ¦ I ¦ J ¦ K ¦ L ¦ M ¦ N ¦ O ¦ P ¦ Q ¦ R ¦ S ¦ T ¦ U ¦ V ¦ W ¦ X ¦ Y ¦ Z

A

ABDIEL — An Ork Terror Ship crippled this Imperial Navy Dauntless class light cruiser of Battlefleet Gothic at Mirrobel.
ABOMINATION — This hulk, classified as Alien Vessel 547 was the site of battles between Marines, Orks, and Chaos, including Chaos Androids.
ABOMINATOR — Chaos cruiser
ABSOLOM — This Mass Cargo Conveyance of the Adeptus Mechanicus typically carried titans to their battle zones. It transported Imperial Guard regiments on occassion, including Gaunt's Ghosts. The vessel is 16km long, and Lord Captain Grasticus commanded it during the Sabbat Worlds Crusade.
ACCUSED ETERNITY — This daemon warpship was sighted in the Balanor system at the edge of the Eye of Terror.
ADMIRAL DRAKE — This Relentless class training cruiser, commanded by Captain Grove, survived the attack on Halemnet Base in the first days of the Gothic War in 143M41.
ADMIRAL LENOX — The Ork vessel Butcher destroyed this cruiser during the Gothic War.
ADMONISHER — Space Marine Black Templars Battle Barge
AEON AQUILIFER — This Imperial Navy Battlefleet Pacificus cruiser served at and in the vicinity of Hydraphur.
AGONIZING DEATH — This Chaos battleship took part in the blockade of Garomar in 999M41 and the Cobra Class destroyer Spiteful destroyed her by ramming.
AGRIPPA — Imperial Navy Lunar class cruiser of Battlefleet Gothic
ALAITOC CRAFTWORLD — This frontier Craftworld, whose name means Doom of Eldanesh, has a high ratio of Rangers and Pathfinders. Its colors are blue and gold.[EAF] [ULT]
ALLURE — Imperial rogue/sprint trader operated out of the region of the Angelus Subsector and was captained by Bartol Siskind, who won it in a card game from its previous captain.
ALTANSAR CRAFTWORLD — This Craftworld was lost into the warp 500 years after the fall when a brief expansion of the Eye of Terror drew the craftworld into its clutches for over five centuries. The only presumed survivor is Maugan Ra. Its colors are red and black.
ALTAR OF TORMENT — This flagship of the Dark Eldar pirate force, Cabal of the White Sorrow, fell to the Rogue Trader vessel Son of Seth in the Periphery of the Calixis Sector in 570M40.
ANARCHIC VENDETTA — The crew of this Carnage class cruiser rebelled, leaving the remains of their officers on Station 26/A and causing considerable damage before forced away by the battleship Duke Helbrecht
ARACH-QUIN CRAFTWORLD — Its colors are black and red.
ARCHON KORT — Imperial Dictotor class cruiser was named after the Archon, and was lost during the Gothic War.
ARDENT SEEKER — A false prophet of the Pilgrims of Hayte ravaged this mission ship en route to Maccabeus Quintus in 799M41.
ARINGHE CRAFTWORLD — Its colors are red and silver.
ARISTOTLE — This warship of Battlefleet Thrace encountered the warp beast of Bhein Morr subsector and survived to tell the tale.
ARROW OF MAGRITTA — This vessel of the Phrax Rogue Trader fleet contained the Office of Envoys.
AR'SABAN QUEEN — The Night Hag, of the Executioners Space Marines, captured and scuttled this Chartist mass-conveyor during the Badab War.
ASCENDANCE — This scout frigate received a distress call from the forces at Arx as they were wiped out in 139M41.
ASURYAN'S CHOSEN — Eldar Eclipse class cruiser fought in the Gothic War.
AUGEIAS — Howling Griffons Strike Cruiser was destroyed in the Executioners assault on the Khymara system in 907M41 of the Badab War.
AURUM SANCTUS — This bonded trader vessel, captained by Vardos del Biel, operated under direct charter of the Adeptus Ministorum as a penance ship.
AUSPICIOUS ILLUMINATION OF ETERNITY — Hive Ships of Hive Fleet Naga destroyed this flagship of Iyanden Craftworld, commanded by Admiral Draech, in 810M41
AVENTIS SAPPHIRE 7 — This dromon runner occasionally served the League of Blackships and was severely damaged in a collision with the Highcaster above Hydraphur due to a sabotaged transmission.

B

BAKASURRA — This Tiger Claws chapter Strike Cuiser emerged from the Warp at the edge of Segmentum Pacificus in 680M41, over fourteen centuries after starting their voyage. It was commanded by Captian Vetala and contained one hundred battle brothers. The vessel vanished again in the vicinity of Krodha, the home world of the chapter.
BARBARIC — The orbital defenses of Platea destroyed this Ork Terror ship during the Gothic War.
BARON MYKAL — This Punisher Class Cruiser served in Battlefleet Pacificus at and around Hydraphur.
BARON SURTUR — Imperial Navy Dauntless class light cruiser of Battlefleet Gothic, named after the Baron, was one of the first to detect Warmaster Khuzor's fleet near the Formosa Cluster.
BASSAAN — This military vessel was the flagship of the Phrax Rogue Trader flotilla.
BELLATOR ULTRIX — Imperial Inquisition ship that carried Inquisitor Fazael to Jenicae Delta.
BELTRAND — This vessel brought the Vessorine janissary assault force to Gudrun in 386M41
BENEDICTION — Imperial Ecclesiarchy Destroyer was destroyed by the Inquisitorial Battleship Golgotha after it became host to a greater daemon of Slaanesh.
BEST OF EAGLES — Imperial free trader transported Inquisitor Eisenhorn from Eechan to Mordia.
BIEL-TAN CRAFTWORLD — This warrior Craftworld, whose name means Rebirth of Ancient Days, possesses a Swordwind army suited to eliminating the colonies of other races. It lies at the southern rim of the galaxy, believed to be the rim of the ancient Eldar Empire. They have significantly more shrines to warrior aspects than other craftworlds. Their Court of the Young King, comprised of elder warriors, is rare in that they hold as much sway as the farseers. They appear to hold the Orks as enemies, preventing their spread to worlds suitable to Eldar colonization. It's colors are white and green. [TEM]
BLACK LIBRARY — This lesser Craftworld, lies within the Webway and is guarded by Harlequins amongst others. Within its stacks there are rumored to be a map of the entire webway, the book of Rhana Dandra, and the Book of a Thousand Sons.
BLACK PAIN — The Legatus Stygies destroyed this chaos battleship.
BLACK STAR — Prince Conanmaol commanded this Eldar Shadow class cruiser that preys upon Gothic sector shipping from the Graildark Nebula.
BLADE OF INFINITY — This pre-Heresy cruiser emerged from the Warp in 615M33, twenty-thousand years after its departure.
BLASPHEMOUS VOYAGER — This space hulk carried Traitor Marines and was destroyed in the sun of the Salamantis system.
BLOOD OF KHAINE — Eldar Cruiser captured by the Imperial Fists, led by Captain Lysander in 585M40.
BLOODHAWK — The shipyards of Mars constructed this Retribution class battleship of Battlefleet Gothic in the earliest days of the Imperium. It was severely damaged by torpedoes at the Battle of Merin.
BLOODIED SWORD — Constructed in M34, this Repulsive grand cruiser fought in the Gothic War.
BRIGHT CLAW — This Eldar Shadow class cruiser fought in the Gothic War.
BRIGHT SWORD — This Grey Knight Battle Barge, under orders of Brother-Captain Stern, destroys all the refuge ships from the planet Raxos to prevent the escape of a Tzeentch Changeling in 841M41
BRINGER OF DESPAIR — Constructed in M34, this Repulsive grand cruiser fought in the Gothic War. The Incendrius destroyed her.
BRINGER OF SORROW — Dark Angels and Genestealers fought on this space hulk.
BUTCHER — This Ork Kill Kroozer operated in the vicinity of Quinrox Sound during the Gothic War. She destroyed convoys and the cruiser Admiral Lenox. It looted Bralutha Station.

C

CAESAR — Hive Fleet Behemoth destroyed this Ultrmarines Battle Barge as it defended Macragge in 745M41.
CALLYAC'S PROMISE — This palace ship served as the personal estate and mansion for the Phrax family and their Rogue Trader fleet since M37.
CARDINAL BORAS — This Retribution class battleship forged at Mars was one of only five ships to return from the northern rim expedition of the Rogue Trader Ventunius. It served in Battlefleet Gothic
CARDINAL URDANETA — This Karthan chartist highliner formed the basis of a convoy of 20 armer freighters and mass conveyors dubbed Convoy Urdaneta during the Badab War. She was captured by Lugtf Huron's ambush at Vyaniah.
CAUSUS — This freighter was commissioned to carry Inquisitor Eisenhorn off Gudrun in 386M41.
CELESTIAL KING — This Eldar Shadow class cruiser fought in the Gothic War.
CHAOS ETERNUS — Originally named BF/67-A, this only Acheron heavy cruiser ever built incorporated xeno technology found in Sector 51. Admiral Grove renamed the vessel after it turned traitor during the Gothic War.
CHARIOT OF MATHURIR — This Eldar Shadow class cruiser fought in the Gothic War.
CHILD OF KHAINE — This Eldar Shadow class cruiser fought in the Gothic War.
CLEANSING FLAME — This Imperial troop transport carried the Valhallan 12th Field Artillery to Gravalax.
CORDIALIS MERCATOR — This bounty-hunting vessel captured a Kroot and Tau Etheral for the facility on Biegel 9.
COREVETERAN — This was the warship of Lord Inquisitor Rex at the time of his investigation into the Vorlinghast Warp plague in 981M41.
CRUSADE — Admiral Hanroth led the Battle of the Black Nebula from this Imperial cruiser in 995M41 where it was nearly crippled.
CRUSADER ASCENDANT — This Imperial Navy vessel is the flagship of Commodore Hayl Omenti of the system fleet of Hydraphur.
CTHO CRAFTWORLD — This was a lost Craftworld.
CYPRA PROBATII — The Cypra Mundi shipyards completed this Overlord class battlecruiser during the Gothic War in early M41. She took part in Fleet-Admiral Mourmndark's anti-pirate operation. Doomfire bombers destroyed her in the Battle of Gethsemane.

D

DAMNATION'S FURY — Chaos Despoiler class battleship constructed in latter M36 as a result of the Gareox Prerogative. It fought in the Gothic War and crippled by Nightshade destroyers at Naxos.
DARKENVAULT — This is the orbital headquarters of the Executioners Space Marines chapter, in orbit around Aquilon.
DEATHBANE — Chaos Devestation class cruiser served as Warmaster Arkham's command ship during the Orar Defense in 143M41 of the Gothic War.
DEATHBLADE — This Chaos Murder class cruiser fought in the Gothic War.
DEATHSKULL — Chaos Slaughter class cruiser fought in the Gothic War. She was crippled by attack craft and then destroyed in Orar's atmosphere as she drifted.
DEATHSPITTER — This vessel discovered the space hulk Hammer of Foes.
DEFENSE OF STALINVAST — Imperial Navy light frigate of Battlefleet Scarus engaged the Fournier in a boarding action at 56-Izar
DEMIARCH VESPASIAN — This Imperial warship was named after the Demiarch.
DEMONICUS — This vessel was classified as Space Hulk 669. Eldar and Chaos forces fought upon it.
DESPICABLE ECSTASY — This Chaos Murder class cruiser fought in the Gothic War.
DIVINE RIGHT — Recovered from the space hulk Inculcate Evil in the Charos system in M36, the Cypra Mundi dockyards refitted her from 234-298M36 and determined her age to be from before the Great Crusade. She was flagship of Battlefleet Artemis from 306M36 to 457M37, and became the flagship of Lord Admiral Ravensburg of Battlefleet Gothic in 458M37. She is an Emperor class battleship, and has fought in too many engagements to list.
DEVINE SANCTUARY — Imperial Navy battlecruiser
DEVOURER OF SOULS — (Also: Devourer of Stars) Angron of the World Eaters Traitor Marines used this space hulk as a base during the 1st Armageddon War.
DIARMID'S REDEMPTION — Imperial Navy vessel led a system patrol squadron at Hydraphur. Flag-Captain Irian Traze commanded her.
DOMINION — Battlefleet Gothic upgraded this Tyrant class cruiuser with captured traitor equipment during the Gothic War, increasing the range of her batteries. She fought in the Faustus Assault.
DOMINUS ASTRA — Imperial Navy Emperor class battleship commanded by Admiral Rath ended the Occlusiad by destroying the palace-warship of the Blind King. In the Battle for Macragge in 745M41, she charged to the center of Hive Fleet Behemoth and detonated her Warp engines, destroying both herself and a large portion of the Tyranid fleet.
DOOMBRINGER — This Chaos Murder class cruiser, along with the Steel Fang and Monstrous, destroyed the battleship Relentless Persecution in the final days of the Gothic War.
DORHAI CRAFTWORLD — This was an isolated Craftworld.
DORN'S SWORD — This Black Templar's Strike Cruiser took part in the Donian Crusade in 985M39.
DRAKE — Commander Jamieson commanded this vessel against Ork pirates in the Monsaic Cloud during the Gothic War.
DREADCHILD — This Gothic Class Cruiser of Battlefleet Karthargo served as the main protection of Convoy Urdaneta duirng the Badab War. She was captured by Lugft Huron's forces during the ambush at Vyaniah.
DUKE HELBRECHT — Imperial Navy Apocalypse class battleship forced the Anarchic Vendetta away from the remains of Station 26/A.
DUTIFUL — Originally laid down in 126M34, this Slaughter class cruiser destroyed the production facility for its advanced Scartix Engine Coil on Sethelan forge world, for which it was renamed the Soulless.

E

EIROANTHA KHABA — This Eldar battleship fell to the Divine Right.
EISENSTEIN — Loyalist Space Marines seized this Imperial Navy frigate at Isstvan III and attempted the passage to Terra to warn the Emperor of Horus' plans.
ELIARENATH'S GIFT — Eldar Eclipse class cruiser fought in the Gothic War.
EMPEROR'S BENEVOLENCE — This Imperial Navy Battleship served at Typhos Prime, bombarding the Coritanorum, in Ultima Segmentum.
EMPEROR'S BENIFICENCE — This Galaxy Class Imperial Troopship carried the Valhallan 597th and four other regiments from Kastafore to Adumbria in 937M41.
EMPEROR'S FAITHFUL — This Imperial Navy troopship disappeared after taken by Eldar pirates, along with 200,000 crew and 5 million Guardsmen in 920M41.
EMPEROR'S FIST — The vessels of Hive Fleet Behemoth destroyed this Imperial cruiser after luring the Imperial fleet away from Tyran Primus in 745M41.
EMPEROR'S HAMMER — Imperial Navy light frigate of Battlefleet Scarus
EMPEROR'S VENGEANCE — Heretical Flagship captured by the Hammer of Thor
EMPEROR'S WRATH — Captain Streck commanded this Gothic class cruiser during the Gothic War
ENDEAVOR OR WILL — This Imperial Fist Star Fort lies outside the Cadian Gate. The Iron Warriors Warsmith Shon'tu assaulted it.
ENDLESS REDEMPTION — Space Marine Mantis Warriors Battle Barge carried the 2nd and 4th Companies.
ESCAPADE — Captain Bugler commanded this Falchion Class Frigate during the actions at Adumbria in 937M41, crippling three Chaos vessels alongside the Virago. She was built at the Voss shipyards, and also served at Kastafore.
ESSENE — Imperial sprint trader commanded by Tobias Maxilla was an Isolde-pattern bulk clipper. She was 3 km long and 700 m abeam at her widest part. She was entirely crewed by servitors and died, along with her master, in 386M41 in the Jeganda system.
ETERNAL CRUSADER, THE — This space-borne fortress monastery is the chapter headquarters of the Black Templars.
ETERNITY OF PAIN — Chaos Desolator class battleship went renegade in 453M33, and since has defeated at least seven Imperial battleships as well as countless other vessels.
EXALTED — Imperial Navy frigate commanded by the rebel Captain Estrum was the lead ship of its squadron.
EXCESSIVE — This Chaos Carnage class cruiser fought in the Gothic War.
EXCESSIVE FORCE — Imperial Navy battleship destroyed by Dark Eldar at Jurn.
EXILE — This armed Imperial scout ship carried captain Leonatos and his band of exiles on their Bloodquest.
EXTREME PREJUDICE — Imperial Navy Dictator Class Cruiser commanded by Captain Melyus.

F

FAITHFUL'S DELIVERANCE — This starfortress, manned by the Doom Legion Space Marines, watches over the Elusian Maze asteroid fields.
FHIANNA RETHOL — Imperial forces captured this Eldar Shadow class cruiser, but it was destroyed at Argante Station before it could be studied.
FIRE OF HEAVEN — Unknown forces destroyed this Grand Cruiser of Battlefleet Calixis at the boarder of the Hazeroth Abyss in 123M40.
FIRESTAR — This Tau Custodian Class Fleet Carrier perished amongst the asteroids of Delmarra as Kor'O'Vanan's fleet pursued the last elements of Hive Fleet Gorgon in 902M41.
FLAME OF PURITY — This Overlord class battlecruiser from the Cypra Mundi shipyards served alongside the Sword of Retribution for the majority of the Gothic War. Captain Abridal sacrificed himself and the ship to disrupt the star-killing beam of the Blackstone fortresses at Schindlegeist in 151M41.
FOE-REAPER — Constructed in M34, this Repulsive grand cruiser went rogue in M38 and destroyed an Adeptus Mechanicus facility on AFR-74. It fought in the Gothic War
FONTAINEBLUE — Imperial rogue trader smuggled grinweed and yellodes in addition to legitimate cargo in the vicinity of Angelus Subsector.
FORCE OF DESTINY — Space Marine Howling Griffons Battle Barge carried 1st company and the Chapter Master.
FORTITUDE — Imperial Navy Dictator class cruiser of Battlefleet Gothic fell prey to an Eldar ambush at Picus VI where packs of Hellebore frigates reduced her to a hulk. She took part in Fleet-Admiral Mourmndark's anti-pirate operation. Captain Drew commanded her during the Gothic War.
FORTITUDE — Imperial Navy picket that transported the Gaunt? Ghosts kill team from Ancreon Sextus to Gereon.
FORTRESS OF AGONY — Chaos Despoiler class battleship constructed in latter M36 as a result of the Gareox Prerogative. It fought in the Gothic War.
FOURNIER — This Imperial Navy heavy destroyer went rogue during the Helican Schism and engaged the Defense of Stalinvast in a boarding action at 56-Izar.
FURY OF SPATIAN — Imperial Navy frigate of Battlefleet Scarus bombarded the Farness Beta operations of the heretic Quixos.

G

GALANT — Imperial Cobra Class Destroyer served in a squadron with the Impetuous and Spiteful in the defence of Adumbria in 937M41.
GANN-LUCTIS — Varro Phrax used this sanctioned liner to travel from Gunarvo to Hydraphur. It was destroyed attempting to enter the warp too far in system at Hydraphur.
GAUNTLET OF WRATH — This Overlord Class Battlecruiser fell to a luck lance strike from the light cruiser Lady Sybaline during the Battle of Silent Reach in 906M41.
GLORY OF ALGOL — This Imperial Navy carrier frigate rebelled durilng the Helican Schism and was badly damaged and forced to retreat by the Saint Scythus at 56-Izar.
GOLGOTHA — Inquisitorial Battleship captained by Aral Kovad
GORINUM — This space hulk was once an asteroid base. Space Marines and Genestealers fought aboard it.
GREYWOLF — Imperial Navy frigate commanded by Captain Bayforth fought in the Magreth system during the Gothic War.
GROBIUS — Hunter Class Frigate escorted titan freighters from Balor Secundus to Vivaporius.
GUARDIAN — Imperial Navy Dauntless class light cruiser of Battlefleet Gothic fought Ork pirates in the Monsaic Cloud. Captain Blythe commanded her during the Gothic War.
GYGA VII — This ship of the Phrax Rogue Trader fleet holds the Mechanicus cabal, laboratories, and workshops.

H

HAMMER OF FOES — The apparent initial vessel of this hulk was an abandoned freighter. The Deathspitter found it.
HAMMER OF JUSTICE — Captain Grenfeld of Battlefleet Gothic commanded this Imperial Navy Dominator class cruiser in the Port Maw blockade and the raid on Alios. She destroyed the Unforgivable during the Port Maw Blockade.
HAMMER OF THOR — This Ecclesiarchal Lunar Class Cruiser had a crew of 2123, and was sabotaged and destroyed over Parnis in the Yarokin Veil. It was armed with augmented Plasma Batteries. It was recommissioned as an Ecclesiarchal ship in 258.M39, became an Ecclesiarchy flagship in 523M40, and fought in the Battles of Caffre Prime (802M41), Augustus (977M41), and Tiberius II (001M41). She took the Star of Destruction and Emperor's Vengeance.
HAND OF MERCY — This Imperial Navy frigate detected a distress call from Grendel's World
HAND OF VENGEANCE — This Imperial Navy vessel fought at the siege of Perlia while Commissar Cain was aboard.
HARBINGER OF ANARCHY — The Divine Right ended this Chaos battleship.
HAVOCK — Imperial Navy Dauntless class light cruiser of Battlefleet Gothic was refitted with torpedoes during the Gothic War. She took part in Fleet-Admiral Mourmndark's anti-pirate operation.
HEATHAN PROMISE — Chaos Slaughter class cruiser fought in the Gothic War.
HERACLES — This Black Templar's forge-ship took part in the Donian Crusade in 985M39.
HIGHCASTER — This cargo barge was destroyed in a collision with the Aventis Sapphire 7 over Hydraphur due to a sabotaged transmission.
HINTERLIGHT — Inquisitor Ravenor used this starship, captained by Cynia Preest, for almost thirty years.
HEARTLESS DESTROYER — The Cypra Mundi shipyards constructed this Styx class cruiser in early M33, and it turned traitor in 299M35. She carried Doomfire bombers in her flight decks. She was crippled and destroyed at the Battle of Duran in the Gothic War.
HONOURED PROPHECY — This Cobra Class Destroyer serves the Death Spectres Space Marines, carrying 5 Marines and 150 serfs.
HORRIFIC — The Cypra Mundi shipyards constructed this Styx class cruiser in early M33, and it was captured by heretic raiders in 299M35 due to the traitorous withdrawal of the Heartless Destroyer. This vessel returned the favor at the Battle of Duran in the Gothic War.

I

IDHARAE CRAFTWORLD — The Invaders Space Marines suffered losses in an assault on this craftworld.
IL'KAITHE CRAFTWORLD — This craftworld has moved through Segmentum Obscurus, arcing around the Eye of Terror. This path moves along the border of Segmentum Pacificus. Its colors are green and purple. [OBS] [PAC] [EOT]
IMPERIOUS — This Mars class battlecruiser of Battlefleet Gothic destroyed the Chaos cruiser Soulless while under the command of Captain Compel Bast.
IMPETUOUS — Imperial Cobra Class Destroyer served in a squadron with the Galant and Spiteful in the defence of Adumbria in 937M41. She was destroyed by a Desolator Class Battleship as the second wave of the Chaos fleet attacked the planet.
INCENDRIUS — Imperial Navy Tyrant class cruiser of Battlefleet Gothic, commanded by Captain Grendl, destroyed the Bringer of Despair
INCULCATE EVIL — Imperials captured this space hulk in the Charos system in M36, recovering the hull of the Divine Right.
INDOMITABLE WRATH — This Emperor Class Battleship serves in Segmentum Obscurus. [OBS]
INDESTRUCTIBLE II — This Armageddon Class battlecruiser, captained by Igor Yates served in the defence of Adumbria and was the flagship of Lord General Zyvan. It fought a valiant action against the Chaos battleship opposing her.
INDOMITUS IMPERIUS — Chaos forces crippled this Lunar class cruiser in the attack on Halemnet Base in 143M41.
INEVITABLE VICTORY — Imperial Navy troopship commanded by Captain Vidius Strell
INFLEXIBLE — The Fire Hawks destroyer Ravage rammed this Lamenters Strike Cruiser, causing severe damage at the Hallows Point system in 906M41 in the Badab War. It escaped but was forced to exit the Warp in the fobidden system of Hiruko, where it was lost with all hands.
INITIATE OF SKALATHRAX — Formerly the Relentless, the traitor Carnage class cruiser turned its guns on troop transports during the Skalathrax Landing. Imperial agents destroyed it while docked at the rebel Darkstation in Priam Sector.
INJUSTICE — Chaos Hades class heavy cruiser fought in the Gothic War.
INTOLERANCE — Imperial Navy Emperor class battleship
INVESTIGATION — The first tendrils of Hive Fleet Behemoth destroyed this Imperial cruiser. Inquisitor Kryptman discovered the hulk in his investigation surrounding Tyran.
INVINCIBLE — Captain Cornwallis commanded this Gothic class cruiser of Battlefleet Gothic during the Gothic War. She was lost over Proxadis, leaving 1250 survivors.
IRON DUKE — Imperial Navy Lunar class cruiser of Battlefleet Gothic damaged the bridge of the Deathbane during the Defense of Orar.
IYANDEN CRAFTWORLD — This Craftworld, whose name means Light in the Darkness, was ravaged while shattering a part of Hive Fleet Kraken in 992.M41. Its colors are yellow and blue. It travels the start of the Eastern Fringe, near the Ultima Segmentum. [ULT] [EAF]
IYBRAESIL CRAFTWORLD — This Craftworld was detected in 437.M37 and again in 107.M39 in the western quadrant of Segmentum Obscurus. Its colors are blue and white. [OBS]

J

JAPHET — Imperial Navy Battlefleet Pacificus troop ship fought in the Sabbat Worlds Crusade.
JUDGEMENT — Imperial Navy cruiser destroyed by Dark Eldar in 699M39.
JUDGEMENT'S CLARION — Adeptus Arbites Indictor class fast cruiser served the precinct at Hydraphur.
JUSTICAR — Imperial Navy Lunar class cruiser of Battlefleet Gothic
JUSTICE OF TERRA — This Imperial Navy cruiser escorted the Pride of Lothar and fought Dark Eldar vessels near Kragmeer.
JUSTITIA FIDES — Imperial Space Marine Imperial Fists strike cruiser
JUSTUS DOMINUS — Imperial Nacy Oberon class battlecruiser survived the sneak attack of the Unforgivable in M37.

K

KAGEMUSHA — Bartol Siskind was the First Officer of this Imperial rogue trader
KILLFRENZY — This Chaos Slaughter class cruiser, captained by Abraham Thurst, gained its name by continuously broadcasting KILLFRENZY across all channels. The ship often continues to fight long after it would be prudent to disengage.
KORTIKA — Mistress Zanti commanded this ship of the Phrax Rogue Trader fleet. Orbital batteries in Hydraphur destroyed it as it attempted to fleet the system.
KOVASH VENATOR — This Imperial Navy Long Serpent class Cruiser served with Battlefleet Pacificus at and around Hydraphur.

L

LADY HELENE — The Reclaimers Strike Cruiser Revenant destroyed this system defence boat of the Viridia system that had rebelled during the genestealer infestation of the late 920s of M41.
LADY SYBALINE — Battlefleet Solar Light Cruiser scored a fortunate lance hit against the battlecruiser Gauntlet of Wrath's bridge during the Battle of Silent Reach in 906M41, resulting in its eventual destruction.
LAERTES — Admiral Sartus lost this Imperial vessel to the combined attack of many Ork Onslaught attack ships during the Gothic War.
LAND? VISION — This Explorator ship was the first to contact the primitive Tau in 789M35.
LAURELS OF GLORY — The Imperial Navy designed this vessel for training stormtroopers. It possessed various bays that could be configured to represent different environments. It served as a training ground for Colonel Schaefer's Last Chancers kill team.
LEGATUS STYGIES — Though the hull of this Emperor class battleship was laid down in M30 at the Stygies yards in the Vulcanis system, work was not completed until the end of M32. Its crew consider it blessed as it has survived a suicidal ramming attack at the Battle of Callavell, was one of the only survivors of the purgation of Ulthanx, and destroyed the Chaos battlehip Black Pain at Arriva. Admiral Mourndark commanded her throughout the Gothic War.
LEONCOUR — This ship rebelled during the Helican Schism and was destroyed by the Vulpecula at 56-Izar.
LEVELLER — Space Marines Black Templars Battle Barge was part of Imperial Navy Fleet Balthazar.
LIGHT OF DIOGENES — This Rogue Trader vessel under the command of Nicodemus Medacio carried Inquisitor Kelman and nearly fell prey to Chaos pirates before being saved by the Exile.
LORD DAROS — This Imperial Lunar class cruiser of Battlefleet Gothic was named after the Imperial Lord of the primitive Unloth system.
LORD SYLVANUS — Imperial Navy Tyrant class cruiuser of Battlefleet Gothic was named after the Imperial Lord. Her warp engines were severely damaged in 143M41, requiring two years of repair.
LUGANNATH CRAFTWORLD — (Also: LUGGANATH). This Fir Iolarion Craftworld lost control of its warp gates and was nearly wiped out by daemons. It was first detected in 801.M40 and encountered again in 805.M40 in the western quadrant of Segmentum Obscurus. [OBS]
LUMEN GEODESS — This dromon runner served in the vicinity of the planet Hydraphur, semi-dedicated to serving the Adeptus Arbites.

M

MACHARIUS MEMORIEM — Imperial Navy frigate encountered a Q'Orl chainship.
MACROCOSMAE — Imperial rogue trader smuggled a number of illegal drugs in addition to legitimate cargo in the vicinity of Angelus Subsector.
MAGRITTA'A ARROW — This semi-military vessel served with the Phrax Rogue Trader fleet. Orbital torpedo batteries at Hydraphur destroyed the ship as it attempted to flee the system.
MAJESTY — This Strike Cruiser of the Black Templars fought alongside The Eternal Crusader during the Third War for Armageddon.
MALAN'TAI CRAFTWORLD — This Eldar Craftworld lay in the path of Hive Fleet Behemoth, but were warned by their Rangers, Pathfinders, and the Shadow in the Warp, allowing them to escape to the galactic southwest. They worked with Iyanden and Idharae Craftworlds to destroy Hive Fleet Naga circa 800M41. Undetected Mycetic Spores of a Naga Hive Ship penetrate the Craftworld in 812M41, destroying it. Later, a Kepper of Secrets, N'Kari descends upon the vacant craftworld and begins gorging on its soul stones. A force of Grey Knights arrive and through great sacrifice manage to destroy N'Kari. They leave a guard force there to prevent a something similar happening.
MALIGNUS MAXIMUS — Chaos Hades class heavy cruiser fought in the Gothic War.
MARQUESSA REPENTIA — Imperial Navy Lunar Class cruiser was first to contact the Umbra species in 604M41.
MATER LACRIMARUM — The chapter barque of the Lamenters Space Marines was crippled in the Optera system during the Badab War in 908M41. It surrendered to the assaulting Minotaur force rather than risk annihilation.
MAYAN — Space Marine battle barge helped purge a genestealer infestation from XX
MERCILESS DEATH — Chaos Despoiler class battleship constructed in latter M36 as a result of the Gareox Prerogative. It disappeared in the Amerikon Sector before destroying 16 merchants in the Banardi Conflict. It disappeared again in early M39 and then fought in the Gothic War.
MEROS CRAFTWORLD — This was a doomed Craftworld.
MIGHTY ENDEAVOR — Imperial Navy cruiser destroyed by Dark Eldar at Jurn.
MINOTAUR — Imperial Navy Lunar class cruiser of Battlefleet Gothic
MONS OLYMPUS — Imperial Adeptus Mechanicus super-heavy barge transported titans and war gear to Cadia.
MONSTROUS — This Chaos Murder class cruiser, along with the Steel Fang and Doombringer, destroyed the battleship Relentless Persecution in the final days of the Gothic War.
MORDEKAI? LIGHT — Imperial Adeptus Mechanicus sprint stealth vessel commanded by High Magos Kuzela Matrada.
MORRIAN CRAFTWORLD — The diplomat Arhan of this craftworld tried to negotiate with Guyan Sethe, the human ruler of Assyri.
MORTIFIER — Imperial Space Marine battle barge took part in the Torment Crusade and supported Inquisitor Alastor.

N

NACRETINEÏ — This craftworld's colors are white and blue.
NAVARRE — Imperial Navy escort frigate of Battlefleet Pacificus sometimes served as an escort to the transports carrying the Tanith First and Only. Gaunt viewed it as his flagship. It was approximately 2km long.
NEBUCHANDEZZAR — This Imperial Navy heavy destroyer went rogue during the Helican Schism and was destroyed by the Emperor? Hammer and the Will of Iron at 56-Izar.
NIGHT HAG — Executioners Space Marine strike cruiser commanded by Vanir Hex at the beginning of the Badab War conducted a number of supply convoy raids against the loyalists circa 115906M41. It became the bane of loyalist shipping, claiming a number of vessels as prizes.
NIGHT'S VIGIL — This Battle Barge of the Black Templars fought alongside The Eternal Crusader during the Third War for Armageddon.
NOONLIGHT PHOENIX — This very fast courier vessel had a four-tiered hull and a flared prow shaped like a snake's head. It operated in the vicinity of Santo Pevrelyi in Segmentum Pacificus.

O

OBSCURA — The Genestealer infestation from this space hulk threatened Maelstrom VI.
OCTAVIUS — This Space Marine Battle Barge of the Ultramarines fought at the Battle for Macragge, its Thunderhawks evacuating Marneus Calgar.
OGRAGRON — A Rogue Trader fought members of the Ordo Xenos aboard this space hulk.
OKTOBER COUNTRY — This rogue trader was captained by Kizary Thekla, who took over after Master Angwell dies, and runs the lanes between Angelus Subsector and Lucky Space.
OMADORUS — Bartol Siskind served on this Imperial rogue trader
OMICRON'S DART — This small Ecclesairchal dromon served at Hydraphur. The Bassaan destroyed it.
OMNISSIAH'S BOUNTY — (Also: Onmissiah's Blessing) This Adeptus Mechanicus freighter was actually a well appointed transport. It carried Commissar Cain and Magos Killian to Interitus, where it was destroyed by a Necron vessel in 928M41.
OPHIDIUM GULF — Space Marine Black Templar Strike Cruiser, commanded by Castellan Raimer, survived the Garon Crusade only to disappear after the self-named Crusade of the Ophidium Gulf in 998M41.
OPPORTUNE — Imperial Navy destroyer took part in the Battle of Duran and the destruction of the Heartless Destroyer during the Gothic War.
OUTBOUND BROTHERHOOD — This Tau vessel led a explorer fleet. Hive Fleet Gorgon destroyed the vessel before it could transmit any warning in 899M41

P

PATERNUS GLORIEM — Imperial Navy Emperor-class vessel was infiltrated by the Hrud.
PENITENT QUEST — Space Marine Mantis Warriors Second Company Strike Cruiser
PERDITION'S FLAME — Inquisitor Kryptman placed a brood of Tyranids aboard this space hulk and diverted it towards the Ork Empire of Octarius in the hopes that the two races would critically weaken each other.
PERDUCO ASTRUS — This Imperial ship served the Ordo Xenos of the Inquisition and was destroyed at Biegel 9.
PERFECT INCISION — Small Inquisition starship commanded by Inquisitress Kalypsia and carrying a Deathwatch squad
PERVERSION OF PAIN — This was Ghazghkull's presumed command hulk.
PETRARCH — Hunter Class Frigate escorted titan freighters from Balor Secundus to Vivaporius.
PINNACLE OF SAVAGERY — This Ork hulk arrived in the Vaxanide system in 507M41 and was destroyed by Battlefleet Calixis.
PIOUS VICTORY — Imperial Navy cruiser destroyed by Dark Eldar at Jurn.
PLAGUECLAW — This chaos vessel was part of the Ninth Black Crusade and fought in the Gothic War.
PLANET KILLER — This battle-ship sized Chaos vessel mounted weapons capable of destroying planets. Abaddon used it as a terror weapon during the Gothic War.
POLARIS RISING — The Mantis Warriors took this Fire Angels strike cruiser as a prize of war in the Sigard system near the end of the Badab War in 909M41.
PRIDE OF ANGELUS — This freighter was lost in the warp.
PRINCE YUGEN — This was the vessel of the Imperial Rogue Trader Daskon Holpstein, operating on the Eastern Fringe.
PRINCEPS AMALGUM — Imperial rogue trader assisted in Inquisitor Lyko? escape from Thracian Primaris to Eechan.
PRAETOR KATERINA — This Adeptus Arbites patrol vessel of the Hydraphur system intercepted the Aurum Sanctus, but was not allowed to board due to Ministorum protest.
PRIDE OF LOTHUS — This troop vessel, commanded by Captain Ferrin, transported the Last Chancers 13th Penal Legion.
PRINCIPIA GRAVIS — The Astral Claws recovered this Adeptus Mechanicus Explorator Ark and returned it to Cypra Mundi during the Taninim Campaigns.
PRISON OF LOST SOULS — The resident Chaos Marines killed invading Space Wolves on this space hulk. Dark Angels Terminators later eliminated the Chaos Marines.
PROMETHIAN — Imperial rogue trader captained by Vaden Awl sometimes operated in Saruthi space during the time that Tobias Maxilla was a junior crewman. The ship was supposedly taken by Eldar renegades in the Borealis Reach.
PROSERPINA DAWN — This victuals vessel of the Phrax Rogue Trader fleet had massive pastoral decks where verdikine grazed. It was one of the slowest of the fleet.
PULCHRITUDE — This far trader, captained by Gelb Startis transported Inquisitor Eisenhorn from Durer to Gudrun
PURE OF HEART — This Imperial freighter, commanded by Captian Durant, transported Commissar Cain and the Valhallan 597 to Simia Orichalcae in 932M41.
PUREST INTENT, THE — This Space Marine Strike Cruiser of the Shadow Wolves came from the Shevilar shipyards and was lost with all hands to xenos raiders in 966M41. It's hulk impacted outside Helsreach Hive at the start of the Third War for Armageddon, having been used by the Orks as a makeshift lander.
PURGATION — Imperial Navy Sword Class Frigate commanded by Captain Ordius.
PYRE OF GLORY — This Salamanders Space Marine Battle Barge participated in Operation Sedna, the liberation of Surngraad in 906M41.

Q

No Entries

R

RADIANT WAY — Imperial Navy battlecruiser destroyed by Ork pirates in 986M41.
RAPTOROUS REX — Space Marine fortress monastery of the Fire Hawks was a pre-Imperial mobile start-fortress given to the chapter by Sebastian Thor in recognition for their efforts in the Wars of Apostasy. It was instrumental in the successful defense of Vengeance Station at Hallows Point in 906M41 during the Badab War. It disappeared in a warp jump in 963M41 and was declared lost to the warp in 983.
RAVAGE — This Fire Hawks frigate rammed the Lamenters strike cruiser Inflexible at Hallows Point in 906M41 in the Badab War, severely damaging the other vessel, but was itself destroyed.
REAPER OF SOULS — This space hulk was a Chaos Marine base. A Tzeentch force led by Magnus the Red and a Lord of Change, M'kach'n, fought Blood Angels and Grey Knights aboard it.
RED HARBINGER — Mantis Warriors strike craft boarded and captured this Fire Hawks Strike Cruiser in 904M41 of the Badab War in the Galen system. It was returned in a prisoner exchange.
REGAL AKWITANE — Imperial rogue trader commanded by Trade Master Golkwin transported Inquisitor Eisenhorn? gun-cutter.
RELENTLESS — This was the first cruiser of the Carnage class, but was renamed Initiate of Skalathrax after it went renegade in M37.
RELENTLESS PERSECUTION — This battleship of Battlefleet Ardekka fell to the cruisers Doombringer, Steel Fang, and Monstrous in the final days of the Gothic War.
RENOWNED — This vessel fought against Ork pirates in the Monsaic Cloud during the Gothic War.
RESTLESS VEGEANCE — This Chaos Grand Cruiser fell to the battleship Divine Right.
REVENANT — This Strike Cruiser of the Reclaimers Space Marine Chapter took part in the Veridian Campaign and an assault on the Space Hulk Spawn of Damnation in 928-9 of M41.
RETRIBUTION — Imperial Navy Lunar class cruiser of Battlefleet Gothic
RHADAMANTHINE — This Imperial Navy Dictator class cruiser served with distinction on the Skargul patrol and was lost during the Gothic War.
RIGHTEOUS DESTINY — The vessels of Hive Fleet Behemoth destroyed this Imperial cruiser after luring the Imperial fleet away from Tyran Primus in 745M41.
RIGHTEOUS FURY1 — Imperial Navy Gothic class cruiser of Battlefleet Gothic
RIGHTEOUS FURY2 — This Imperial Navy Devastation class cruiser rebelled, becoming the Unforgivable.
RIGHTEOUS WRATH — This Imperial Troopship, commanded by Captain Parjita carried Commissar Cain and the Valhallan 597th.
ROCK, THE — This spacecraft is the fortress monastery of the Dark Angels Space Marines, built from an asteroid that dwarfs most space hulks.
ROKDROPPA — This Ork space hulk was used in the invasion of Armageddon, and destroyed by Imperial forces. [ARM]
RUMBELDETH — This Ork space hulk was destroyed by Imperial forces during battle for Armageddon. [ARM]

S

SACRED TETRARCH — The star-fortress Raptorous Rex destroyed this Mars Class Battlecruiser at Iblis during the early days of the Badab War. It was armed with a Nova Canon, which proved unable to pierce the defenses of the pre-Imperial fortress monastery.
SAIM-HANN CRAFTWORLD — This Craftworld, whose name means Cosmic Serpent, is famous for the Wild Riders. It was one of the first craftworlds to escape the Fall, and has ties with some Exodite worlds. It travels near the Halo Zone in Segmentum Pacificus. Its colors are red and white. [HAZ] [PAC]
SAINT SCYTHUS — Imperial Navy Battleship of Battlefleet Scarus fought at 56-Izar.
SCAVELEUR — Effries Tanokbrey was master of this rogue trader that worked in the Helican Subsector.
SCION OF GRIEF — Space hulk
SCUTUM — This Imperial Navy Cruiser rebelled during the Helican Schism and was destroyed by the Saint Scythus at 56-Izar.
SCYLLA — This space hulk, called Ognazdreg Gargdurslagulk by the Orks, was Warlord Nazdreg Ugurdgrub's base.
SCYTHE OF THE RIGHTEOUS — This Emperor's Scythes Battle Barge was found over half a century after being lost, but infested by Genestealers.
SERAPH OF JUDGEMENT — Chapter Master Rovik Blake commanded this Space Marine Battle Barge of the Astral Claws Chapter during the assualt on Ork forces at Hellsiris in 715M41. Blake perished and the ship was forced to withdraw.
SERPENTINE — This Strike Cruiser of the Salamanders Space Marines broke through the Ork blockade during the Third War for Armageddon and deployed drop pods to the docks of Helreach Hive. She was sea-green and charcoal-black.
SHARAK-FRAKA — This Fra'al battleship fell to the Divine Right.
SIGISMUND'S LIGHT — This Black Templar's Battle Barge took part in the Donian Crusade in 985M39.
SILENT WARRIOR — This Eldar Eclipse class cruiser captured the Vigilant, and destroyed the penal legion transports rendezvousing with her during the Walpurgis Attack in the Gothic War.
SIN OF DAMNATION — Genestealers fought Blood Angels aboard this famed space hulk.
SLAUGHTERING STAR — This strike cruiser of the Fire Hawks Space Marines brought down the Damned Company of Lord Caustos.
SON OF JOHN — This Tarask class merchant engaged a Slaughter class cruiser, allowing the rest of its covoy to escape. It was destroyed in the process.
SON OF SETH — This Rogue Trader vessel, commanded by Rogue Trader Kobras Aquairre rammed and boarded the Altar of Torment in the Periphery of the Calixis Sector in 570M40.
SONG OF RIGHTEOUSNESS — This Adeptus Ministorum pilgrim ship stopped at Gunarvo.
SOULLESS — Formerly the Dutiful, Admiral Dorez gave this Slaughter class cruiser its new name after the raid on Sethelan forge world. She was destroyed by the battlecruiser Imperious during the Orar Raid
SOUNDING OF AURUCON — This was one of the slowest ships of the Phrax Rogue Trader fleet.
SPAWN OF DAMNATION — Commissar Cain and the Reclaimers Space Marine chapter fought genestealers on this space hulk in 928M41.
SPIRIT OF WYSTEN — This packet lighter transported Inquisitor Eisenhorn from Gudrun to Cyto in 386M41.
SPITEFUL — Imperial Cobra Class Destroyer served in a squadron with the Galant and Impetuous in the defence of Adumbria in 937M41. She was crippled by a Desolator Class Battleship during that action, but was salvaged and brought back into service in 948M41. She was eventually destroyed in ramming the battleship Agonizing Death in 999M41 at the blockade of Garomar.
SPORE, THE — Deathwing Terminatrs fought Genestealers aboard this space hulk.
STAR JACKAL — This Marines Errant Strike Cruiser fought clear of the ambush of Convoy Urdaneta with heavy damage. It was one of the only ships not captured by the Tyrant's forces.
STAR OF DESTRUCTION — Renegade Battlecruiser captured by the Hammer of Thor
STARDEATH — Eldar Eclipse class cruiser destroyed fourteen convoys consisting of 28 merchant and military vessels in the Gothic War. Destroyers of the Skargul Patrol destroyed her after a chase through the Graildark Nebula
STEADFAST — Imperial Navy Dominator class cruiser
STEEL FANG — This Chaos Murder class cruiser, along with the Doombringer and Monstrous, destroyed the battleship Relentless Persecution in the final days of the Gothic War.
STEL-UIT CRAFTWORLD — This craftworld's colors are green, grey, and white.
STONEBREAKER — Traitor Marine Iron Warriors battle barge bombarded Hydra Cordatus.
STRIDENT VIRTUE — Imperial Navy Sword Class Frigate
SWORD OF CONTRITION — Space Marine Mantis Warriors Fourth Company Strike Cruiser commanded by Captain Krelian
SWORD OF HALCYON — Space Marine vessel
SWORD OF HORUS — Genestealers fought Blood Angels aboard this space hulk.
SWORD OF ORDON — Red Scorpions Battle Barge took part in the battle at Hallows Point in the Badab War in 906M41, and was instrumental in the loyalist victory.
SWORD OF ORION — Imperial Navy Gothic class cruiser of Battlefleet Gothic received crippling damage at the hands of packs of Hellebore frigates during the Picus Offensive. She took part in Fleet-Admiral Mourmndark's anti-pirate operation.
SWORD OF REDEMPTION — Imperial Navy battlecruiser served with Battlefleet Gothic out of Part Maw during the Gothic War.
SWORD OF RETRIBUTION — This Overlord class battlecruiser from the Cypra Mundi shipyards served alongside the Flame of Purity for the majority of the Gothic War.
SWORD OF WARRIORS — The vessels of Hive Fleet Behemoth destroyed this Imperial cruiser after luring the Imperial fleet away from Tyran Primus in 745M41, but not before it was able to transmit a warning to the planet.

T

TERIFUS — This space hulk started as a Way Station in the Beta Magellan Sector.
TERMINUS EST — Chaos battleship of Nurgle
TERRIBLE ANGEL — The Imperial Navy fired upon this Space Marine Imperial Fists Strike Cruiser in the years following the Horus Heresy.
TIR-VAL CRAFTWORLD — This craftworld's colors are purple and yellow.
TORMENT — Pirates captured this Desolator class battleship during the Spartan War after its engines were destroyed and it drifted into an asteroid mine field. It destroyed the orbital defenses at Ghori VI and has wandered widely throughout the Imperium, from the Ultima Segmentum to the northern rim. It fought in the Gothic War.
TRUTH'S TENACITY — This colony ship was the first to reach the Armageddon system, and its settlers created the Temple of the Emperor Ascendant, which included stasis and void screens from the ship.
TYCHO'S REVENGE — Space Marine Blood Angel cruiser carried the Second Company in 753M41.

U

ULTHWÉ CRAFTWORLD — This Craftworld, whose name means Song of Eldanesh is in perpetual mourning. It is home to the Black Guardians, Seer Council, and Changers of History. They perpetually combat Chaos and guard the Eye of Terror. Its colors are black with touches of white. [EOT] [OBS]
ULTIMA VICTRIX — Imperial Navy Ironclad cruiser of Battlefleet Scarus was destroyed at anchor by an internal heretic rebellion.
UMBRARIUS INQUIS — Imperial Inquisition cruiser commanded by Viddiem Porla bombarded Biegel 9.
UNCLEAN — Chaos cruiser
UNFORGIVABLE — Formerly named the Righteous Fury, this Devastation class cruiser crippled the battlecruiser Justus Dominus in a sneak attack and then destroyed all fourteen Guard transports and six escorts in M37, forever earning her current moniker. She was crippled by fire ships at Delos. The Hammer of Justice destroyed her in the Gothic War during the Port Maw Blockade.
UNHALLOWED HEART — This Space Hulk emerged from the Warp in 681M41 at the galactic southwest edge of the Maelstrom. It spread suicidal despair and madness to any nearby vessel or planet.
UNHOLY DOMINION — Squadrons of Aconite frigates destroyed this Chaos Murder class cruiser during the Gothic War.
UNHOLY HARBINGER1 — This space hulk contained a dense asteroid with Necron artifacts. It was destroyed by torpedoes.
UNHOLY HARBINGER2 — This space hulk consisted of between 38 to 42 separate craft, at least thirteen of xeno-origin, and was discovered just inside the Cloras jump point. It is thought to contain Standard Template Constuct data.
UZIEL — Imperial Navy Dauntless class light cruiser of Battlefleet Gothic was one of the first to detect Warmaster Khuzor's fleet near the Formosa Cluster. She fought Ork Terror Ships at Mirrobel, and took part in Fleet-Admiral Mourmndark's anti-pirate operation..

V

VAINGLORY — Imperial rogue trader commanded by Master Ensmann also saw service by the then junior Bartol Siskind and Kizary Thekla.
VALIANT — Captain Ezram commanded this cruiser against Ork pirates in the Monsaic Cloud during the Gothic War.
VANGUARD — Chaos forced destroyed this Dauntless class light cruiser in the attack on Halemnet Base at the start of the Gothic War.
VANISHING STAR — Imperial Navy Gothic Class Cruiser commanded by Commander Kastor.
VARANTHA CRAFTWORLD — This Craftworld, whose name means Crown of Our Steadfast Hopes, is known for its artisans of metals, gems, and flowers. It has passed close by Hydraphur during its travels. [PAC] [HAZ]
VEILED SALVATION — Inquisition Battleship of the Ordo Xenos
VENGEFUL HAND — The Executioners Strike Cruiser Night Hag destroyed this Lunar Class Cruiser of Battlefleet Maelstrom during the Badab War.
VERVILIX — This mass-troop conveyor of Battlefleet Calixis suffered serious malfunctions and was forces to land on the forbidden world of Mara in 810M41.
VIGILANT — Imperial Navy Dauntless class light cruiser of Battlefleet Gothic was refitted with torpedoes during the Gothic War. The Edlar cruiser Silent Warrior captured her during the Walpurgis Attack. She fought in the Third Battle of Savaven
VILAMUS — The fortress monastery ofthe Marines Errant
VINDICTIVE — The combined might of two Chaos Blackstone fortresses reduced this Imperial Navy ship to a hulk at Fularis in 144M41.
VIORAG NAGGATH — Eldar Harlequin Cruiser, also known as the Ship of Fools. It was tainted by chaos and destroyed by the Eldar shadow seer Gavrosh Askar.
VIRAGO1 — Imperial Navy destroyer took part in the Battle of Duran and the destruction of the Heartless Destroyer during the Gothic War.
VIRAGO2 — Imperial Navy Falchion Class Frigate, under Captain Walenbruk, served alongside the Escapade during the actions at Adumbria in 937M41, helping to cripple three Chaos vessels. She was built at the Voss shipyards, and also served at Kastafore.
VOICE OF DEACIS — Captain Ginzane commanded this vessel out of Avignor and Lodesha, which became a penance vessel due to failures to the Ecclesiarchy. It was crippled by xeno corsairs two years later.
VOICE OF THE SERAPH — This Battlefleet Pacificus Furious class Grand Cruiser served at and around Hydraphur.
VOLTARIUS — This space hulk contained pre-Dark Age relics. It was encountered near the Eye of Terror [EOT]
VULPECULA — Imperial Navy Battleship of Battlefleet Scarus fought at 56-Izar.

W

WANTON DESECRATION — This Chaos Carnage class cruiser fought in the Gothic War.
WAR TALON — This Raptors Space Marine Battle Barge participated in Operation Sedna, the liberation of Surngraad in 906M41, where it was heavily damaged in the initial attack on the system defenses.
WARMAKER — This ancient Battlefleet Gothic training vessel, Hades class, turned traitor at the very outbreak of the Gothic War, destroying Jarnu Orbital Station, and later taking part in the blockade of Slavonis.
WIDDERSHINS — Imperial rogue trader smuggled obscura and gladstones in addition to legitimate cargo in the vicinity of Angelus Subsector.
WILL OF IRON — Imperial Navy light frigate of Battlefleet Scarus was equipped with minesweeping equipment.
WOLF OF FENRIS — The Red Corsairs captures this Space Wolf cruiser in 995M41.

X

No Entries

Y

YME-LOC CRAFTWORLD — This Carftworld was detected in the western quadrant of Segmentum Obscurus between 989.M39 and 341.M40. It traveled in the vicinity of the Eye of Terror. Its colors are grey and red. [EOT] [OBS]

Z

ZAHR-TANN — This craftworld's colors are brown and black.
ZEALOUS — The Imperial Navy upgraded this Tyrant class cruiser of Battlefleet Gothic with captured traitor vessels with longer-ranged batteries.

Last revised - 17 November 2011
@@.fourcolumns
[img width=150 [Shipwreck.image.cover]]
<div class="tc-table-of-contents">
<<toc "Shipwreck">>
</div>
@@
{{Necron Shroud-class Light Cruiser}}
{{Dark Eldar Sigil-class Destroyer}}
{{Imperial Siluria-class Light Cruiser}}
* a very small 4'11" man who serves as a magistrate for a major area in London.
* he knows that he is smart but not politically astute.
* Works to the right thing even when being manipulated.
Sir Richard Burton

 *physical stats assume middle age, they can be adjusted up or down slightly to account for age.
Strength: 4 Intellect: 5 Agility: 3 Charisma: 6 Endurance: 5 Social Level: 4 CAREERS: Army, Explorer
SKILLS: Fisticuffs 3, Throwing 2, Close Combat 4 (sword and polearm), Stealth 2, Marksmanship 3 (pistol), Wilderness Travel 7 (mapping), Fieldcraft 2, Swimming 3, Observation 6, Eloquence 6, Theatrics 7, Linguistics 7 (English, French, Italian, Latin and Ancient Greek, Portuguese, Afgan, Punjabi, Persian, Hindustani, Arabic, Amazo-nian dialects, Central African dialects, and any other native language spoken in a region where he has been residing for more than a few months), Riding 3, Leader-ship 3


Sir Richard Burton serves in many ways as an archetypal character for role-playing in the 19th century. As a soldier, explorer, and a diplomat he developed a deep affinity for the native peoples of the places he served, learning their languages and cultures to such an extent that he was often able to blend into their world without their knowing.
Burton was the son of a wealthy heiress and a lieutenant-colonel in the British Army. His father’s successful career ended in scandal when he re-fused to testify in the divorce proceedings of the Prince of Wales and his princess, Caroline, on the grounds that to do so would violate her honor. As a result young Sir Richard spent his youth in France and Italy where he developed his love of languages.
His father intended that he join the clergy, but Sir Richard had other ideas. In 1841 he got himself expelled from Oxford and convinced his fa-ther to purchase him a commission in the Army of the British East India Company.
Once in India he began to go native, taking great interest in the cul-tures, religions, and languages of the subcontinent. He became proficient in the languages of Hindustani, Persian, Arabic, Afghan, and Punjabi, even trans-lating the religious literature of the Hindus like the Karma Sutra. He was soon able to pass himself off as a native and became a valuable agent for the British in the “Great Game” between Brtian and Russia for control of the region in the north of India.
After seven years in India he became ill and returned to England. During he convalescence he wrote a series of books about India and one on bayo-net exercises, but none of them were well received due to criticism of his going native and his conversion to Islam.
Burton determined that he would make the pilgrimage to Mecca (hegera), but because few westerners were allowed into the Islamic holy city, he would go disguised as an Moslem. He was able to get leave from the army by promising to map the Arabian peninsula and gaining the support of the Royal Geographical Society. In disguise he convinced the British consul in Alexandria that he was an Indian Moslem and gained documents to that effect. After an adventurous caravan journey he reached Mecca where he secretly measured the Ka’ba Stone and completed the rites of the hegera.
In 1854 he had to return to duty in Bombay, but he immediately began to raise support for an expedition to locate the source of the Nile. Although the government was busy fighting the Crimean War, eventually Sir Richard received permission to explore coastal Somaliland. Here began Sir Richard’s tumultuous relationship with John Hanning Speke, a British officer assigned to the expedition who was really more interested in big game hunting than exploring. Burton and Speke’s adventures are chronicled in the movie The Mountains of the Moon.
Once in Africa the party split up and Burton went alone to the forbidden city of Harrar to observe the slave and coffee trade. No westerner had ever seen the city before. It was believed that if a white man entered the city it would fall and several had died trying.
Burton then rejoined Speke and the other officers that made up the rest of the expedition in April 1854. A week later their camp was attacked by natives. One member of the expedition was killed. Speke was wounded eleven times and Burton was impaled through the jaw with a spear. The attack forced an end to the expedition, and they returned to civilization.
Almost immediately Burton began lobbying for a second expedition.
The second expedition saw the end of Speke and Burton’s friendship.
While Burton was bed-ridden with malaria Speke discovered Lake Victoria, the source of the Nile. While Burton was still too ill to travel Speke returned to England, published, and went on a lecture tour. Sir Richard felt betrayed and refused to participate in later expeditions along the Nile.
In 1860 Burton took a nine month vacation in the United States. It is quite likely that he was also acting for the British foreign service which needed intelligence about the possibility of civil war. He travelled from New York City through the South and West to Utah (where he met Brigham Young), Colo-rado, and San Francisco before returning to England.
The 1860’s were a high point in Burton’s career. He married Isabell Arundell in 1861 and served as British consul in British West Africa and Brazil and he was able to explore the Congo and Amazon rivers. He contin-ued to learn native languages and write books describing geography and tribal cultures.
All this ended in 1869 when he was posted as consul in Damascus. He was extremely unpopular there due to the earlier publication of a three volume book describing his pilgrimage to Mecca. Eventually, he was relieved and forced to return to England. The next twenty years marked a low point in Burton’s life. He was unable to obtain a diplomatic appointment and was often short of money.
Finally in 1890 he was able to return to the government’s good graces and was appointed consul in Trieste in the Austro-Hungarian Empire. While there he completed his last work, a translation of Arabian Nights. He died later that year. It is believed that his wife burned many of his papers imme-diately after his death in order to safeguard his reputation and cover up his conversion to Islam.
SIR RICHARD IN A CAMPAIGN
Finding a way to use Sir Richard Burton as an NPC in almost any 19th century campaign should not be difficult. The characters could be members of his expeditions along the Nile, Congo, or Amazon. What were Burton’s intentions during his trip to the United States? Was he evaluating the South’s chances of winning the Civil War? Was he seeking out Southern leaders about a possible alliance? Or was he hoping to bring the West under British influence? The twenty or so years between diplomatic appointments from 1869-1890 are laden with opportunities for those game masters willing to take historical liberties. Maybe Burton went to Mars and became involved in exploration there.
{{Tau Skether'qan (Messenger)-class Starship}}
{{Tau Skether'qan-class Starship}}
{{Chaos Slaughter-class Cruiser}}
[img[Smartbombing Fit.image]]
{{Eldar Solaris-class Light Cruiser}}
;How to play Solo
{{Chaos Soulcage-class Slaveship}}
!MAKING CHARACTERS
Once you have a general idea of who your hero is, it is time to flesh out the details. Characters for Space 1889: Red Sands follow the standard Savage Worlds character creation process, with a few minor alterations.

!!Traits
To begin, determine the traits that define your hero’s capabilities.

!!!Attributes

;Your hero starts with a d4 in each of his five attributes: 
:Agility, 
:Smarts, 
:Spirit, 
:Strength, and 
:Vigor. 

You then have 5 points to distribute among them as you choose. Raising an attribute a die type costs 1 point, and you may not raise an attribute above d12.

!!!Secondary Statistics

Charisma is +0 unless changed by Edges or Hin-drances.

Pace is 6” unless changed by Edges or Hindrances.

Parry is equal to 2 plus half your Fighting skill die type. 
Edges, Hindrances, and certain equipment can modify your Parry score.

Status is 2 unless changed by Edges or Hindrances.

Toughness is equal to 2 plus half your Vigor die type. 
Edges, Hindrances, and Armor can modify your Tough-ness.

!!Skills
You have 15 points with which to buy skills. Raising a skill by a die type costs 1 point as long as it is no higher than its linking attribute. It costs 2 points per die type to raise a skill over its linked attribute.
All the skills in Savage Worlds rules are available in Space 1889: Red Sands. However, the only Arcane Background skill available is Weird Science, with its associated Weird Science Edge (see page 12 for more).
Piloting is expanded to include steering (as a helmsman) for aerial flyers, cloudships, zeppelins, and interplanetary ether flyers. 
Boating covers guiding sailing and steam water vessels, as well as submarines, and is a general expertise needed to crew aerial vessels.
Riding encompasses the gamut of animals used for trans-portation from horses, camels, and elephant to gashants, ruumet breehr, flying skrill, and pacyosaurus.
Persuasion entails all types of eloquence, theatrics, or bargaining.
Driving includes both animal-drawn and steam-powered ground vehicles.
Survival covers foraging in and mapping of an area.

When Gulliman set about the long and arduous task of preparing Codex Astartes, the role of space vessels amongst the Adeptus Astartes proved a particular sticking. For an Imperium, still reeling from, internecine Heresy that almost tore it apart, the division of power was a vitally important consideration. Of the most extreme options on offer, it was ventured by some that the Space Marines should be denied any vessels at all, barring intra-system transports for movement between homeworlds and attendant moons. Corax, amongst others, protested strongly that in fact had the Space Marines been better equipped with fleets of their own his own Legion might not have been so horrendously decimated when trapped on Istvaan V by Horus and the newly revealed traitors. Instead, a compromise was reached which limited the Space Marines to vessels whose primary role was that of transport, delivery and suppression designed to facilitate planetary assault. Only the smallest of vessels would be permitted to act exclusively as gunships, with the larger battlebarges and strike cruisers remaining predominantly as aids to invasion, ensuring the Space Marines would never present a threat to the Imperial Navy proper. Inevitably', the wrangling over interpretation of a ship's ‘primary role' leads to some chapters possessing rather more versatile fleets than the Imperial Navy is entirely comfortable with.

Unlike the vessels of the Imperial Navy’, a Space Marine ship has a relatively small crew. A Space Marine is far too valuable to waste in manning a gun or watching a surveyor screen, and so only the officers aboard a vessel are likely to be Space Marines, as well as the few Techm.arin.es who oversee the engines and perform other mechanical duties. Almost all the ship's systems are run and monitored by servitors; half-human cyborgs who are wired into the vessel's weapons, engines and communications apparatus. There are also a few hundred Chapter serfs to attend to other duties, such as routine cleaning and maintenance, serving the Space Marines during meal times and other such honoured tasks. These serfs come from, the Chapter's home planet or the enclave they protect, many of them. Novitiates or applicants who have failed some part of the recruiting or training process. These serfs are fanatically loyal to their superhuman, masters, and indoctrinated into many of the lesser orders of the Chapter's Cult. Although human, they still benefit from, remarkable training and access to superior weaponry than is usually found on a naval vessel, making them, a fearsome prospect in a boarding action - even without the support of their genetically modified lords.

[img[Battlefleet Gothic Armada.image.11]]

!!SPACE MARINE LEADERSHIP

Space Marines are highly organised, efficient and disciplined, allowing them, to out-perform, their enemy in almost any situation. When randomly generating the Leadership value for a Space Marine ship, use the table here.

|!D6 Roll |!Leadership |
|1-2|8|
|3-4|9|
|5-6|10|

!!BOARDING ACTIONS AND HIT & RUN ATTACKS

Space Marines are the supreme fighting force of the Imperium., and excel at ship-to-ship boarding actions, where their skill is paramount and their lack of numbers irrelevant. To represent this, Space Marine ships add +2 to their D6 roll when, they fight in a boarding action and +1 when they' make any hit and run attack.

Enemy' hit and run attacks against a Space Marine ship deduct 1 from, their dice rolls (and so will fail on a roll of 1 or 2 before modification).

!!PLANETARY ASSAULTS AND EXTERMINATUS

Space Marines excel at planetary landings and attacking enemy-held systems. Their entire organisation and the weapons and ships at their disposal are designed solely for the purpose of reclaiming or destroying planets that have fallen into enemy hands.

In a Planetary Assault scenario, Space Marine strike cruisers and battle barges earn 2 Assault points for every turn they spend landing troops or bombarding the planet, rather than 1 point as is normal. In an Exterminatus scenario, a battle barge can be used as an Exterminator, unchanged from, the following data sheet (battle barges are equipped with virus bombs and cyclotronic warheads as standard). In addition, once a battle barge is in position to exterminate the planet, you need to roll a 3+ to do so rather than a 4+.

!!SPACE MARINE WEAPONS

Some weapons function differently on Space Marine vessels, as described below.

!!!Bombardment Cannon

Space Marine battle barges carry a heavyweight battery of bombardment cannons as part of their main arm.am.ent. Bombardment cannons are huge, turret-m.oun.ted linear accelerators, capable of launching a salvo of heavy magma bomb warheads. As their name implies, bombardment cannons are used primarily for pounding planetary defences into rubble and giving devastating orbital support to Space Marine landing forces. Bombardment cannons are equally' devastating in ship-to-ship combat, capable of blasting apart any capital ship in just a few salvoes.
Bombardment cannons fire in the same way' as weapon batteries with two exceptions:

#)	Bombardment cannons always hit on a 4 or more, regardless of the target's armour (even vs ordnance).
#)	Bombardment cannons inflict critical hits on a roll of 4 or more, rather than just on a roll of 6.

!!ORDNANCE

Rather than the bombers and fighters employed by Imperial Naval forces, the Adeptus Astartes make exclusive use of the Thunderhawk gunship. They also make use of other types of ordnance not widely used in the Imperial Fleet.

Space Marine vessels may fire boarding torpedoes instead of ordinary torpedoes, as detailed in the Ordnance rules in Battlefleet Gothic. Remember that as these are Space Marines, they will have a +1 bonus to their hit and run attacks if they hit an enemy ship.

There are no specific rules for drop pods - they have been taken into account with the Space Marines' special rules for planetary assaults.

Thunderhawk gunships combine the abilities of assault boats and fighters, and move like any' other attack craft, with a speed of 20cm. A Thunderhawk counter that is intercepted by' enemy' fighters or moves onto an enemy ordnance marker removes the enemy as fighters would. However as they are extremely resilient, roll a dice when this happens. On a score of 4 +, do not remove the Thunderhawk marker (However, Thunderhawks can only remove one enemy marker in any given ordnance phase and stop moving as soon as they intercept an enemy'. Also, if a Thunderhawk marker uses its save to remain in play' and comes into contact with another ordnance marker in the same ordnance phase, it is removed normally.). Note that against Eldar fighters, which also have this ability', it is possible that you end up with neither marker being removed! If this happens, either marker is free to move away in their next turn, or they can stay in place and attempt to remove their enemy again.

When. a Thunderhawk marker moves into contact with an enemy ship's base, they are treated exactly like assault boats (with the +1 bonus to their hit and run attack for being Space Marines). Using its 4+ save does not prevent it from, attacking a ship if in base contact with one when stopped. Once a Thunderhawk marker has made its hit and run attack, it is removed from, play'

{{Imperial Spectre-class Frigate}}

3R-31, 2L-40, 1R-87
{{Imperial Stalwart-class Minekeeper}}
{{Tau Stronghold-class Commerce Vessel}}
<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://www.eaglegames.net/Struggle-of-the-Empire-Deluxe-p/102285.htm"></iframe>
{{Chaos Styx-class Heavy Cruiser}}

https://1.bp.blogspot.com/-LqyCk03hMgw/XJ9v2GohY0I/AAAAAAAAGr0/cBlpLkVt9eA-SLFyU-toxup0M4SJJV3VwCLcBGAs/s320/P1010719.JPG

https://1.bp.blogspot.com/-1YIRkgAgzYk/XJ9v2yevKiI/AAAAAAAAGr8/_-kz7Kl0gCAidyBHeDAuA9bx1sjXdIrvQCLcBGAs/s320/P1010721.JPG

https://2.bp.blogspot.com/-hnAFjm8dwV4/XJ9v4BSJQqI/AAAAAAAAGsE/lnezaUqN7WU7p3od0KbBPQF1ijsiwjrEACLcBGAs/s320/P1010723.JPG

https://4.bp.blogspot.com/-9XFuseAY-1s/XJ9v5g9dprI/AAAAAAAAGsQ/iAxEK6TYZTAb7N5_CCSFhuMxlEhJTpt7ACLcBGAs/s320/P1010727.JPG

<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://over-open-sights.blogspot.com/2020/10/sudan-mounted-lt-colonels.html"></iframe>

\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Surface Battle Group]]
<<multilevel-toc-expandable tag:"Surface Battle Group" stateTiddler:"state_Surface Battle Group">>

---

{{Imperial Sword-class Heavy Frigate}}
[img[Syrtis Major: The Residency.image]]

In the early days of English settlement on Mars much was made of the lack of protection provided by Martian structures and the narrow Martian streets for the offices of the Colonial Office. As it turned out, the solution to this dilemma was readily available: the abandoned Martian fortress over-looking the juncture of the canals in the center of Syrtis Major. The fortress had been partially destroyed during the final assault on Syrtis Major by Brit-ish troops, but a large portion was still intact. Captain Harrison Cruthers KCMG, Royal Engineers, undertook the task of turning this Martian ruin into a proper locale for the residency of the Governor General and his Colonial Office staff.
After rebuilding the outer wall, Cruthers realized that he could create a protected compound for the Colonial Office. He razed the remaining struc-tures inside the wall and laid out streets. He then had his engineers con-struct parks and government buildings, including the Governor General’s home. To secure more construction and residents, he arranged for parts of the property to be leased to other builders and to the Lloyd’s Bank. The end result of Cruthers efforts is a slice of London occupied by the cream of the British Government on Mars.
1. ROYAL MARTIAN CONSTABULARY
Located next to “Police Gate”, the RMC occupies a large three-story, stone fortress like building, surrounded by a ten foot high stone wall. The architect’s plans originally called for an iron fence, and he was quite ada-mant about the requirement until it was pointed out to him that the RMC would need to double its force just to protect the iron from theft.
On the top floor of the Block House, as it is called by police and public alike, are holding cells for those awaiting trial in the various courts within the residency compound. On the second floor, in several small and run down offices, the plain clothes division of the RMC and a small contingent from Scotland Yard work. The Yard’s internal regulations call for a Chief Inspector and two Deputy Chief Inspectors to head its operations, however, the office is understaffed with only a single DCI present. This is due to a lack of desire to accept a posting so far away from London by most British police-men. There is some rivalry between the boys from the Yard and the detec-tive force of the RMC.
There is a far greater rivalry between the detectives on the second floor and the uniformed constabulary on the first floor. The constables feel that they do all the work and have no privacy from the public, thus coveting the second floor to serve as locker room and lounge. A model of a police sta-tion, the first floor with its high ceilings, long hard benches for the public and holding cells is very impressive. If it were not for the continual presence of Martians in the station, a visitor would feel as if he were in any local police office in England.
Below ground are the constable’s dressing rooms and the armory for the RMC. Hidden in one corner of the lower basement is an entrance to an array of tunnels that connect the block house to the governor’s residence and Government House.
2. BANK OF ENGLAND
Standing as solid as the Pound Sterling, the bank building commands the south west corner of the residency. The massive three story building is made of local materials but with an imported marble floor in the lobby, said to be made of several tons of the finest Italian marble. The directors of the Bank of England are rumored to have ordered the marble to Mars in an effort to cool the building. Everyone knows that marble holds its cool tem-perature no matter what the temperature of the room. In actuality, the direc-tors wanted a more English style of lobby to reassure its customers. It ap-pears to have worked, as the Bank of England is the strongest bank on Mars.
The bank is built entirely above ground without a basement because the builders feared canals might flood the vault or worse yet, someone might tunnel into it. The vault is located on the first floor behind some very thick walls. The first floor also houses the managers and tellers, but the directors are located on the second floor where they can look out into the atrium lobby and watch the comings and goings below. Even though the building is three stories tall there is not a third story as such, just some storage over the director’s offices. The atrium lobby of bank takes the front half of this square building and is three stories below the ceiling. The designers would have succeeded in creating a very cool building if they had not put in the massive collection of large south-facing windows. In the back half of the building are the vault and several offices, over which the directors have their own larger offices. They are well lit by the sunlight streaming in through the windows in the front of the bank.
3. PRINCE ALBERT PARK
The English love parks and nowhere this side of Kew Gardens is that more evident than Prince Albert Park. Forming a green oasis between the luxury homes of the residency and the exterior wall, it is one of the most enjoyable places to spend an afternoon, sitting in a pavilion, or walking among the greenery brought from England. The park has been the scene of great horror despite its beauty. The park was the location of the Martin-Jones Massacre, one of the bloodiest Sundays on Mars. Many called for the closure of the park after the massacre, in which members of the notorious Martin-Jones Mob escaped from the Block House with the aid of an aerial flyer that landed in the park. Several citizens were taken hostage with the promise that none would be hurt if the flyer was allowed to depart. No one knows who fired the first shot, but when the smoke cleared, fifteen men, women, and children lay dead and a score more wounded. The flyer es-caped, as did Martin-Jones, a notorious rogue rumored to be Colonel Ian O’Reilly, the notorious Fenian (see the description of O’Reilly in TRMGS #1).
Though some five years have passed since the tragedy, the memory of it is still fresh in many people’s minds, as demonstrated by the uproar over the inappropriately small memorial to those killed on that black Sunday.
Protests not withstanding, a “Black Sunday” obelisk, engraved with the names of the victims, was placed in the northern part of the park.
4. COLONIAL OFFICE
Called Bedford Gardens by those working within, the three-story Colo-nial Office building looms like a Medieval fortress.  No matter what a first time visitor to the Colonial Office might think about Mars, he will find Bedford Gardens imposing, almost as imposing as dealing with the bureaucrats that work within those stone walls.
Located between the offices of the Governor General and the Residency aerial flyer port, Bedford Gardens is the hub of the British Empire on Mars, not withstanding the opinion of the Foreign Office. Contrary to the name, there is not a single green plant growing in the drab structure, and some say not a living thing among the souls that work within. The bureaucrats that inhabit the spartan offices seem to take pride in their officiousness and obstructionist traditions. “It is just not done that way” is a phrase often heard when one of these gnomes of Bedford Gardens is confronted by a situation or request that is not reflected in the regulations.
5. BLOCKS OF FLATS
This large group of flats houses a great many of the employees of the Colonial Office. Like most buildings on Mars without a modern lift, the build-ings are no taller than five stories. Each building contains six flats within its three floors. However, most of the flats on the first floor are taken up with professional offices or lawyer’s chambers. The men working in these offices usually cater to those unfortunate enough to find themselves in the court-rooms of Government House. If a vacancy can be found, rents are, for the most part, very reasonable.
6. TRANSIT JAIL
After the Martin-Jones massacre, the Governor General and the com-mander of the Royal Martian Constabulary decided that those prisoners awaiting transport to Earth should be housed in a separate facility away from the regular holding cells. To meet this need, the transit jail was con-structed, consisting of a two story stone building which rests on a stone foundation some ten feet thick. The walls are rumored to be constructed of five feet of the hardest Martian stone available. Besides the cells, there are enough rooms and supplies for a small garrison to hold out for several days if they become besieged.
7. RESIDENCY PARK
As if to further isolate the “Stone House”, as the transit jail has become known, the planners of the Residency placed a large park between the jail and the home of the Governor General. For some reason this park has never gained popularity with the English residents. This is perhaps because the park is not as well landscaped as Prince Albert Park. The local garrison, however, has adopted the park as their own, taking full advantage of the large open fields for drill and the occasional polo match.
8. GOVERNMENT HOUSE
If anything reaffirms the steadfastness of the Empire and Her Most Britannic Majesty’s presence throughout the Solar System, it is Government House. An imposing structure standing four stories tall, it commands the corner of the Residency like a dreadnought in a small harbor. One of the tallest buildings in Syrtis Major, it has a mechanical lift to raise and lower people between floors. The west wing contains the courts, judges’ cham-bers, small holding cells on the fourth floor, and the records’ office. The junior administrative staff reside on first floor of the east wing with the senior staff in suites on the second floor. The private offices of the Gover-nor General are on the third and fourth floors of Government House.
9. HOTELS
There are three hotels located just outside the Residency: the Savoy, the Dorchester, and the Regency. They form a triangle facing the east wall of the compound and cater primarily to English visitors. Just beyond these three hotels is a fourth hotel, the Imperial. Located closer to the Legation Compound than to the Residency, the Imperial has a distinctly continental flavor to its clientele. Plans of the Legation compound can be found in TRMGS #2.
A) THE SAVOY HOTEL
This is perhaps the most English hotel on Mars. It is modeled after its counterpart in London, including the Savoy Grill. The staff could have been, and most likely was, imported from London.
There is an air about the hotel that speaks of an Empire at its pinnacle.
The staff will look disdainfully at any person who obviously lacks the proper breeding or displays lower class attitudes. They will be more tolerant of improprieties committed by those of high social status. The staff tends to fall over themselves for any visiting royalty, an occasionally embarrassing sight. Foreigners generally do not stay at the Savoy as they are better treated at the Imperial or the Dorchester.
The Savoy Grill is home to the finest English food in Syrtis Major. Like the Hotel, the Grill is a copy of its London counterpart. Proper attire is re-quested at all times, and though patrons are not required to wear morning clothes for luncheon, they are requested to dress for dinner.
Rating: Hotel: OOOOO Grill:OOOOO Rates: £5 to £15 a day;  £40 to £125 a month Grill: Luncheon: 10/—  to  £2, Dinner: £1 to £10 *Meals Do Not Include the Cost of Wine*
B) THE REGENCY HOTEL
The Regency is as posh as the Savoy and the service is almost as good.
The management of the Regency certainly makes every effort to give the impression of a great European Hotel. The hotel presents a more continental atmosphere than the Savoy. The Regency’s staff are more tolerant of those of lesser breeding than the Savoy’s, but they will still be shown the door if they do not measure up to their standards. Unlike the Savoy, the staff at the Regency recognizes that on Mars, one never can never really tell the status of a person by their costume. They are quick to realize that many of the upper classes dress for adventuring and do not look their position at all times.
The Continental at the Regency is an excellent restaurant with a bill of fare that the most experienced European traveler would find impressive.
The menu ranges from French to northern Italian, but if you eat at the Con-tinental you must try the veal, the specialty of the house.  The Continental has one of the best wine cellars on Mars with a house Chablis from Meroe that rivals the finest wines on Earth. Charles, the wine steward, swears that it is produced here on Mars, but few believe him.
Rating:  Hotel: OOOO  Restaurant:OOOOO Rates: £7 to £18 a day;  £45 to £120 a month Luncheon: 10/— to  £2, Dinner: £1 to £10 *Meals Do Not Include the Cost of Wine*
C) THE DORCHESTER HOTEL
The Dorchester Hotel is a moderately priced hotel, a poor relation to the Savoy and the Regency. Its location near Government House and its price make it very attractive to middle level civil servants and those visiting Gov-ernment House who can not afford the Savoy or the Regency.
The Dining Room has a generous bill of fare that is adequately prepared by the kitchen staff, a group of men imported from one of London’s better restaurants, or so the story goes. The truth is that they were imported from London, but not for their cooking skill. A savvy traveler should not take this to mean that they would not find a good meal at a fair price or a clean room close to Government House. A word of caution: the cellar at the Dorchester is not the best and the wine steward does not respond well to criticism.
Rating:  Hotel: OOO  Dining Room:OOO Rates:  £1 to £3 10/— a day; £15 to £55 a month Dining Room: Luncheon: 12/— to £1, Dinner: £1 to £5 *Meals Do Not Include the Cost of Wine*
D) THE IMPERIAL HOTEL
The best hotel on Mars is the Imperial. Rivaled only by the Savoy and the Regency, it ranks with the finest hotels in London or on the Continent.
The lobby of the Imperial is reminiscent of rooms found in French chateauxs or Viennese castles—covered in mirrors, gold filigree, and nearly three sto-ries tall.
Located opposite the west gate of the legation compound, the Imperial is home to much intrigue. On any given evening a visitor can find diplomats, adventurers, and an occasional foreign agent. Rooms at the Imperial range in size from comfortable to spacious suites. There are several floors de-voted to apartments for more permanent guests. These may be rented for a month or more at surprisingly reasonable rates.
One of the pleasant features of the Imperial are the number of guest services that are available. There are, of course, the normal valet and tailor-ing services, a barber, and a house physician. In addition, the hotel will accept any European currency, and will arrange, for a small fee, to exchange any Martian currency into pounds sterling.
The Imperial boasts three fine restaurants in its spacious grounds. The Empire Grill is a very good imitation of the pre-eminent grills of London. The main clientele of the Empire are servants from the Foreign Office and En-glish men with business in the Legation Compound. The Angevin Continen-tal Room offers the finest French food on Mars; the French Ambassador dines here regularly. The Syrtis Room is a less formal restaurant located in the basement of the hotel. It is open at all hours, and offers light meals and drinks of all sorts.
Rating:  Hotel: OOOOO  Restaurant:OOOOO Rates: £7 to £18  a day;  £45 to £120  a month Continental: Luncheon: 10/— to  £2, Dinner:  £1 to £10 *Meals Do Not Include the Cost of Wine*
10. GOVERNOR GENERAL’S RESIDENCE
The Governor General lives in a spacious three story mansion situated in the northeast corner of the residency, a short carriage ride from Govern-ment House. The Governor General has been know to stay in his study at the residence and receive visitors there rather than at his formal offices. For entertaining, he makes able use of the two formal dining rooms and re-nowned catering staff.
The house itself is rather unremarkable, but it does overlook a pond some three quarters of an acre in size. Further accentuating the pond is a stand of oak trees giving the residence the air of an English country manor.
A gazebo has been placed in the shade of the oak trees and has become a favorite place of repose for the Governor General on quiet evenings.
If oak trees in the front garden were not enough to provide uniqueness, the private aerial flyer pad next the house most certainly adds the finishing touch. It was installed at the same time the flyer pad was placed next to Government House by an earlier administration which was concerned about safety and wanted a means of escape close at hand. Now the flyer pad is used by the current Governor General to store his experimental Rutledge Flyer.
11. GOVERNOR’S SQUARE
This small square is conveniently sited behind the barracks. Actually a rectangle of cobblestones, the cavalry stationed nearby hold ceremonial and Sunday parades here. It also provides a play ground for the children living in the homes that line the two sides of the square.
12. BARRACKS
A small contingent of the Household Cavalry regiment has its garrison within the residency compound. Consisting of two buildings with low, red tiled roofs and large, wide windows, the garrison’s barracks look as if they were transplanted from Cape Town. One of the buildings is used as stables and storage for all of the tack used on ceremonial occasions. In addition, the stables house the unit’s string of polo ponies, as well as those of Royal Syrtis Major Polo Club. Sundays, during polo season, the large field in Resi-dency Park holds games between the RSMPC and all comers, including an American team made up of embassy personnel and expatriate business-men.
13. PRIVATE HOMES
A collection of two and three story private homes located around Governor’s Square are home to many of the officers in the Colonial Office.
The homes were designed to fill the requirements of someone who wanted both a town home and country place. Thus they were built as unattached dwellings with ample yards. It has been said that within these three blocks of homes reside the most influential government employees on Mars.

;Tabletop Games
:[[Black Powder]]
:[[Blitzkrieg Commander]]
:[[Burrows & Badgers]]
:[[Cold War Commander]]
:[[Hail Caesar]]
:[[The Perfect Captain]]

;Source
:https://boardgamegeek.com/boardgameexpansion/175509/tactical-gamex
{{Dark Eldar Talon Cyriix-class Frigate}}
[img[Tamiya Fine Surface Primer - White.image]]

Tamiya Fine Surface Primer is ideal for preparing your plastic model parts made of ABS and Styrene plastic for paint. The primer may also be used for metal parts. The white color primer is great for light color applications; while Tamiya’s gray surface primer is ideal for dark color applications. Both primers bite well into plastic surfaces and even fill in small scratches and imperfections. Tamiya’s surface primers may also be wet sanded before paint is applied. Each can contain 180ml.
{{Imperial Tarask-class Merchantman}}
 The game is basically the same as for four players, but each player has 21 cards in hand plus 18 more on the table in six piles of three, each pile having the top card face up.

The deal is as follows: three cards one by one to your opponent, face down, side by side; then three cards to yourself, similarly; then three more to your opponent alongside the first three cards and three more to yourself. At this point there is a row of six cards face down in front of each player. Now repeat the process, dealing the new cards on top of the old ones, so that each player has six face-down piles of two cards. Then do the same again, but dealing the cards face up on top of the piles, so that each player has six piles of three cards with a face up card on top. The remaining cards are dealt out three at a time to the two players, so that each has a hand of 21 cards.

There is no bidding. The non-dealer leads, and the play continues under the usual rules - i.e. you must follow suit and trump if void, and when a trump is led it must be beaten if possible. The face-up cards on your piles can be played to tricks as though they were part of your hand. At the end of each trick, if you have played from a pile you turn the next card of that pile face up. At the end of the play, when both players have played all the cards from their hands and their piles, the winner is determined using the usual targets - for example if you have two bouts and your opponent has one, you win if you have 41 or more points and your opponent needs 51 or more to win. If you want to keep score, the winner gets 25 points plus one for each card point the winner has in excess of the target. If the petit is played to the last trick, the winner of the trick scores an extra 10 for petit au bout. There is no score for poignéee.
{{bfg_Ship Template}}
<div class="tc-table-of-contents"><<toc-selective-expandable 'Tau Commerce Protection Fleet'>></div>

---

Special Rules for the Kor’Vattra Qath’Fannor: Qath’Fannor vessels incorporate the very highest level of technology available to the Tau. These vessels follow all standard rules for Tau vessels as presented in Armada except as specifically modified here:  

* Qath’Fannor capital ships have an integrated Tracking System that is not as sophisticated as those capable by Skether’Quan vessels but serve essentially the same purpose. They ignore range-related column shifts for shooting weapon batteries greater than 30cm, and turrets may re-roll any misses. This system remains in effect even if the ship is braced for impact or crippled. Unlike the Skether’Quan vessel, a Qath’Fannor capital ship cannot project this ability beyond itself. 
*Qath’Fannor capital ships embark a number of Fire Warrior cadres specially trained in shipboard combat and boarding techniques as an integral part of the crew. These vessels ignore the rule for Tau ships halving their boarding strength for the size of the ship. However, even these vessels do not have the ability to teleport, as the Tau have not yet mastered this technology to an acceptable degree.


Tau Custodian Class
Tau Explorer Class
<div class="tc-table-of-contents"><<toc-selective-expandable 'Tau Fleet'>></div>

{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
!Fleet Commander

;0-1 Commander

Your fleet may include a Fleet Commander to lead it if you wish. Your fleet must include a Commander if it is greater that 750 pts. The Commander may be either a Kor'O or a Kor'el.

Tau Kor'el (Ld8)	50 pts
Tau Kor'O (Ld9)	80 pts

The Commander has one re-roll included in his points cost. If you wish, the commander's ship may carry a member of the Ethereal Caste and therefore may purchase additional re-rolls at the cost shown.

Aun'el (1 extra re-roll)	+25 pts
Aun'O (2 extra re-rolls)	+75 pts

!Capital Ships
!!Battleships

Your fleet may include a maximum of 1 Custodian Class Carrier per 750 pts total. Ie. up to 750 pts - maximum 1. Up to 1500 pts - maximum 2, etc.

|[[Custodian Class Carrier	]] |310 pts|

!!Cruisers

Your fleet may include any number of Cruisers.

|[[Protector Class Warship	]] |190 pts|
|[[Emissary class envoy ship	]] |130 pts|

!Escorts

Your fleet may only include Warden class Escorts if a Custodian carrier is also present. Your fleet may include up to 3 Wardens for each Custodian Class Carrier.

|[[Warden Class Carrier Escorts	]] |30 pts|

Your fleet may include any number of Castellan class Escorts

|[[Castellan Class Heavy Escorts	]] |50 pts|

!Ordnance

Barracuda and Manta Squadrons are listed with a ships stats. Ships with gravitic launchers are armed with Tau missiles.

!Planetary Defences

Some scenarios specify that the defender can spend a certain amount on planetary defences. In this case a Tau defender may choose from the planetary defence list up to the points value indicated. For other methods of buying planetary defences see the Battlefleet Gothic rulebook.

Security Orbital	80 pts
Air Caste Orbital City	160 pts

!ALLIES, SUBJECTS & MERCENARIES

Tau fleets make frequent use of mercenaries. These include subject races, commerce partners, allies and the Kor'vattra, the older Tau vessels.

!!Demiurg vessels

A Tau fleet can include 1 Demiurg vessel for every three Tau Capital Ships in the fleet.

Stronghold class commerce vessel	350 pts
Bastion class commerce vessel	255 pts

!!Nicassar vessels

A Tau fleet may include Nicassar Dhows. They may not include more Nicassar Dhows than Tau Escorts, but are otherwise unlimited.

Nicassar Dhow 45 pts

!!Kor'vattra vessels

A Tau fleet may take an allied force of Kor’vatra ships. You may choose Capital Ships and escort vessels from the Kor’vatra fleet list (see BFG Armada). You may not spend more points on Kor’vattra ships than on Kor’'or’vesh ships, and the restrictions of the Kor’vattra list still apply. This fleet may itself include Commanders as normal
!Fleet Commander
;0-1 Commander
Your fleet may include a fleet comannder to lead it if you wish. Your fleet must include a commander if it is greater than 750 pts. the commander may be either a Kor’O or Kor’el.

|Tau Kor'el (Ld 8) | 50 pts |
|Tau Kor'O (Ld 9) | 80 pts |

The commander has one re-roll included in his points cost. If you wish, the commander's ship may carry a member of the Ethereal caste and therefore purchase additional, re-rolls at the cost shown.

|Aun'el (one extra re-roll)  | +25 points |
|Aun'O (two extra re-rolls) | +75 points |

!Capital Ships

!!Battleships
Your fleet may include any number of battleships. If your fleets is worth more than 750 pts it must include at least one Explorer.

|[[Explorer class starship ]] | 230	points each |

!!Cruisers

Your fleet may include any number of Merchant class starships. It may also include up to one Hero class starship for every Merchant or Explorer in the fleet.

|[[Merchant class starship  ]] | 105	points each |
|[[Hero class starship ]] | 180	points each |

!Escorts

Your fleet may include up to one Messenger class starship per 500 points.

|[[Messenger class starship ]] | 50 pts |

Your fleet may include any number of Defender class starships.

|[[Defender class starship ]] | 45 pts |

You may not have more Orcas than the gravitic hook capacity of the fleet. Each Orca costs 25 points as much of their cost is included in the value of the parent ship.

|[[Orca ]] | 25 pts |

!Ordnance

Any ship with launch bays may launch any mix of Barracudas or Mantas. Ships with gravitic launchers are armed with Tau missiles.

!Squadrons

Defenders are fielded in Squadrons of 2-6 ships. They may be combined in Squadrons with Messengers if you wish. They may not be combined with Orcas. 

Messengers operate as single ships, or in Squadrons.

The Orcas from, each parent ship fight as a squadron with the same Leadership as the parent. They are deployed separately from, their parent however and activate different orders. If the parent ships are squadroned together, their Orcas may be likewise. However, the normal squadron limit of six still applies, so you may find it necessary to have more than one Orca squadron associated with a capital ship squadron. Orcas may be squadroned with other Orcas from vessels squadroned with their parent vessels. Orcas may not be squadroned with any other form, of escort

!ALLIES, SUBJECTS & MERCENARIES 

Tau fleets make frequent use of mercenaries. These include subject races, commerce partners, allies and other, less scrupulous individuals. Your fleet may include mercenaries chosen from the following, subject to the relevant restrictions.

!!Kroot Vessels

A Tau fleet can include up to one Warsphere if the fleet is worth 1500 points, or up to two Warspheres in games larger than that.

|[[Kroot Warsphere ]] | 145 pts |

!!Demiurg Vessels

A Tau fleet can include up to one Demiurg vessel for every three Tau Capital Ships in the fleet.

|[[Stronghold Commerce Vessel ]] | 350 pts |
|[[Bastion Commerce Vessel ]] | 255 pts |

!!Nicassar Vessels

Your fleet may include Nicassar Dhows in place of some or all of its Orcas. You may not have more Dhows (or Orcas) than the gravitic hook capacity of the fleet. A ship may have either Orcas or Dhows, but not both so the gravitic hook capacity of the fleet is divided between Orcas and Dhows.

|[[Nicassar Dhow  ]] | 45 pts |

The Dhows from, each parent ship fight as a squadron with the same Leadership as the parent, but may be squadroned with other Dhows from, vessels squadroned with their own parent vessel. If the parent ships are squadroned together, their Dhows may be likewise. 

However, the normal squadron limit of six still applies, so you may find it necessary to have more than one Dhow squadron associated with a capital ship squadron. Dhow Squadrons are deployed separately from, their parent however and activate different orders. Dhows may not be squadroned with any other form of escort.
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}

{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{Imperial Tempest-class Strike Frigate}}
{{28mm Terracotta Army}}
{{Imperial Tesujin-class Strike Cruiser}}
!!!✒[[The Battle of Arras]]
<<tabs tabsList:"[tag[The Battle of Arras]!title[The Battle of Arras]!sort[modified]]" "$:/state/popup/tabs">>





@@.image-float-right
[img width=400 [The Battle of Arras.image]]

@@<br>

The Battle of Arras took place on 21 May 1940, during the Battle of France in the Second World War. Following the German invasion of the Low Countries on 10 May, French and British forces advanced into Belgium. The German campaign plan Fall Gelb (Case Yellow) had evolved into a decoy operation in the Netherlands and Belgium, with the main effort through the Ardennes. German units crossed the Meuse without waiting for reinforcements at the Battle of Sedan. Instead of consolidating bridgeheads on the west bank of the Meuse, the Germans began an advance down the Somme river valley towards the English Channel.

The Allies were thrown into confusion and their attempts to cut off the panzer spearheads degenerated into sporadic, un-coordinated counter-attacks which never achieved sufficient concentration to succeed as the main Allied armies were in Belgium. The offensive at Arras was planned by the British and French to relieve the pressure on the British garrison in the town of Arras and was not coordinated with an attack by the French from the south of the German panzer corridor.

Constrained by the limited forces available to them, the Anglo-French offensive was carried out by a small mixed force of British and French tanks and infantry who advanced south from Arras. The Allies made some early gains and panicked a number of German units but after an advance of up to 6.2 mi (10 km), they were forced to withdraw after dark to avoid encirclement. The attack was a failure but had a disproportionate effect on Hitler and Oberkommando der Wehrmacht (OKW, German armed forces high command).

Concern about more Anglo-French counter-attacks against the panzer corridor before non-motorised German infantry divisions caught up, led Hitler to order the panzer advance to stop until the situation at Arras had been restored. The Allies used the pause to reinforce the Channel Ports, prevent their rapid capture and fortify the western approaches to Dunkirk before the Germans arrived, making the evacuation of the British and French forces in Operation Dynamo possible.

---

;Reference
:https://sotcw.co.uk/bob-wargames.uk/Arras%20BBWW2B.html

;Tactical Assault
:The game uses 250 meter hexes, 5 minute turns, and platoon/section sized units.

;Battlefront Fire and Fury
:Each game turn represents approximately 10 minutes of real time.
:1 inch = 40 meters

;For my game
:1cm = 20m
:4 foot = 2400m
:6 foot = 3600m
:8 foot = 4800m

<div style="clear: both;">

---
!!20 May 1939
;[[British Forces of the Battle of Arras]]
:Lord Gort's original intention, the role of Frankforce as set out in an order given to General Franklyn early on May the 20th, was to 'support the garrison in Arras and to block the roads south of Arras, thus cutting off the German communications [via Arras] from the east'. He was 'to occupy the line of the Scarpe on the east of Arras' and establish touch 'by patrols' with the French.[1] Nothing was said about a counter-attack or any larger objective, nor was there any suggestion that the French would be associated in the operation.
;[[3e Division Légère Mécanique]]
:Motorized enemy columns are reported on the road from Cambrais to Arras near Monchy-le-Preux in the early morning.
:At 9:00 p.m., the Cavalry Corps transmitted an order defining the relief of the 3rd DLM by the British, the modalities of its regrouping behind the Scarpe and the cleaning operations of the western suburbs of the city of Arras while keeping facing the East.
;[[SS Totenkopf Division]]
:At 16:30 hours of that very day the SS-Totenkopf had reached the locality of Mercatel where it halted awaiting new orders; they arrived one hour later, settling down that the division had to march to the northwest, to establish a blocking position and to collaborate on the following day with the encirclement of Arras (The SS-Totenkopf had to force the Scarpe river and then to advance due north against the highway that ran to the west of Arras).

!!21 May 1939
;[[3e Division Légère Mécanique]]
:The relief of the 3rd DLM does not begin until 6:00 am, or 5 hours behind the orders. The rest of the operations was seriously compromised, the 3rd DLM did not fully execute the orders given to it.
:At 7:30 am, the general of the FONT, with the motorcycle squadrons of the 11th RDP available after the relief, begins the cleaning of the western suburbs of Arras. The rest of the elements of the 11th RDP are regrouped under the protection of the 5th BLM. The English indicate that these suburbs are however free from enemies, indicate that they will attack during the afternoon towards Cambrai.
:The Cavalry Corps gave the 3rd DLM the flank guard mission to the west of the British device on the Warlus - Hendecourt - Boiry - Hamelincourt axis.
:From 9:50 am, the special order prescribed for the 11th RDP and the artillery to regroup ready to hold the Scarpe to the west of Arras. The 5th BLM was maintained in the Bailleul area pending attack orders. Operation Order No. 63/3 OP of the Cavalry Corps sets the conditions for the attack by giving the 3rd DLM as reinforcement a battalion of tank group 515 and making available all the artillery of the 3rd DLM, minus one group.
:At 3:00 p.m., the attack begins, the English advance without difficulty, but on the side of the 3rd DLM, it is stopped by heavy elements and artillery from 105 enemies near Berneville.
:At 5:00 p.m., the 3rd DLM reached the Agnez-les-Duisans - Dainville line and the 13th tank battalion was on Warlus in the evening. The Wintz battalion of the 11th RDP was to send it a squadron, a machine gun platoon and a 25mm anti-tank gun to support it.
:At the end of the evening, the attack was on the Warlus - Dainville - Beauraing - Tilloy line.


;[[British Forces of the Battle of Arras]]
:On May 21 1940, the Allied forces launched a strong counter-attack near Arras. The British assault began at 14:00 hours moving ahead in two columns approaching from Nueville and Vimy, at a distance of about 1 kilometre each other. The left column was led by tanks of the 4 RTR (Col James Fitzmaurice) with 37 Matildas I and 7 Matildas II and the right by tanks of the 7 RTR (Col Hector Heyland) with 23 Matildas I and 9 Matildas II.
:Attack was coordinated by Major General Franklyn (GOC 5th Div) and he was allotted 5th and 50th Div plus 1st Army Tank Brigade.
:BUT, the infantry divisions only had two brigades each, one from 5th Div was sent to relieve the French on the river Scarpe and the other brigade (17th) was held in reserve.
:50th Div lost a brigade to garrison Arras itself and to hold the river line east of the city. 
:The British brigade (general Martel) leading the main attack on the Arras-Bapaume on 15h00 consists in :
:Right column :
::7th Royal Tank Regiment (23 Matilda I and 9 Matilda II tanks)
::8th battalion, the Durham Light Infantry
::365th battery, 92nd regiment, Royal Field Artillery (12 25 Pdr howitzers)
::260th battery, 65th anti-tank regiment (12 2 Pdr AT guns)
::One platoon equipped with 3 French 25mm AT guns
::One motorcycle platoon from 4th Northumbrian fusiliers
:Left column
::4th Royal Tank Regiment (37 Matilda I and 7 Matilda II tanks)
::6th battalion, the Durham Light Infantry
::368th battery, 92nd regiment, Royal Field Artillery (12 25 Pdr howitzers)
::260th battery, 52nd anti-tank regiment (12 2 Pdr AT guns)
::One platoon equipped with 3 French 25mm AT guns
::One motorcycle platoon from 4th Northumbrian fusiliers
::General Martel and is headquarter staff
;;The Attack
::General Martel led from an open car. The troops were divided into two equal sized columns of a tank battalion, an infantry battalion (DLI - Durham Light Infantry) plus a battery of field artillery and AT guns. These would probably have been 18/25 pdrs (eight or twelve guns) and the AT guns would be Swedish 37mm Bofors AT guns (three troops of four each). The tanks seem to have been equally divided up.
::The right hand column - fought to clear Duisans and left two infantry companies & some AT to garrison it. Pushed on to Warlus, again captured after a stiff fight, took Berneville, and put troops across the Doullen-Arras road.
::The infantry were pinned down by MG/mortar fire and attacked by Stukas. The tanks left them behind and attacked Wailly where they caused panic among the lead units of 3rd SS. They were now overextended and the whole force fell back to Warlus with heavy losses, where the British AT gunners and Prioux's tanks fought each other! Some of the French tanks then engaged 25th Panzer Regiment around Duisans. The left hand column - fought all the way but made rapid progress. Took Dainville, destroying a "motorised column" in the process (vehicles KO'd, troops made prisoner). Two miles east six Matildas wiped out an AT battery near Achicourt then pushed on to Agny and Beaurains, a few units reached Wancourt on the River Cojeul (the objective of the attack). Most of the heavy fighting took place in the Agny-Beaurains area between 4th RTR and German 6th Rifle Brigade, backed up by the Div artillery and Flak of 7th Panzer Div. Both sides suffered heavy losses. Meanwhile 150th Brigade (50th Div) attacked across the Scarpe to Tilloy, and 13th Brigade also established a bridghead. However it was obvious that the ground could not be held, and the whole force fell back as 25th Panzer Reg approached Arras from the west. They took 400 prisnoers, destroyed "large numbers" of tanks and vehicles, but were left with only 26 Matilda Is and 2 Matilda IIs.

: The British troops faced mainly the 7.PzD and the SS Totenkopf (mot) division, the 5.PzD was arriving from the east but too late to take part to the battle. The Matilda II heavy tank spread some panic in the German ranks, mainly in the SS Totenkopf positions where several troops disbanded, without sufficient mean to destroy the Matilda II. But the 8.8cm Flak and the use of artillery in direct fire rapidly solved the problem.
: The attack started on 15h00 and on the evening it is rather a tactical failure after only 3 km of progression. After the surprise effect, the attack is defeated by the 8.8cm FlaK, the Luftwaffe and counter-attacking German tanks. It illustrates also the inter-allied communications issues because it was a British initiative. The west cover assured by the French tanks went deeper towards Amiens but it was a very limited and secondary action. These troops nevertheless covered the British retreat and inflicted losses to the German tanks.


;[[BEF Frankforce - Right Column]]
:Maroeuil was being shelled when the right-hand column moved off at half past two, and rifle fire was coming from a nearby wood. They had to fight Duisans and French tanks moving forward on the right reported enemy tanks advancing further west—these were part of the German 7th Armoured Division (25th Armoured Regiment).[14] Two companies of the 8th Durham Light Infantry and two troops of the 260th Anti-Tank Battery were left to hold Duisans and to deal with the prisoners captured, and the column pushed on towards Walrus. Here again the enemy was found in possession, but the village was cleared and some prisoners taken. Berneville was then captured and an advanced guard of the 8th Durham Light Infantry with some of the 7th Royal Tank Regiment pushed on towards the Doullens road.[15] But here they met the leading units of the German 7th Infantry Regiment and troops of their S.S. 'T' (Totenkopf) Division which had been concentrating in the area on the previous night and were now resuming their advance.[16] They were pinned down by heavy machine-gun and mortar fire, while enemy aircraft made a twenty-minute attack on the main body. Having lost heavily, the advanced guard withdrew to Walrus. Enemy tanks then attacked both Walrus and Duisans, and though they were held off they established themselves astride the road between the two villages. Our right column could do no more.
:    The infantry of the right column who held Warlus were only extricated with the help of six French tanks which arrived in the nick of time with two armoured troop-carriers. In these they broke through the German hold on the Warlus–Duisans road, while the troops who had held Duisans withdrew after darkness had fallen, with the help of the carriers of the 9th Durham Light Infantry and anti-tank guns of the brigade reserve at Maroeuil. The infantry of the left column were heavily bombed from the air in Beaurains and Agny, and were attacked by German tanks when they moved out. Most of them got away, but one party missed their road and eventually reached Boulogne!


;[[BEF Frankforce - Left Column]]
:The left column also had fighting all the way, with both tanks and infantry. They had occupied in turn Dainville, Achicourt, Agny and Beaurains, and a small advanced party had reached Wancourt. But they were too weak a force to hold all the ground they had covered against the far larger forces which the enemy had in the area. The infantry held Agny and Beaurains while the 4th Royal Tank Regiment fought off the German armour and occupied ground south of Beaurains.[17] They had fought the German 6th Infantry Regiment[18] (the right flank of the 7th Armoured Division) all afternoon, and they had heavy losses in both men and tanks. Like the right column the left had shot its bolt, and there were no fresh troops to follow up their success, or even to make good the ground won. As the evening closed, both columns were ordered to withdraw. Some elements of the French cavalry, acting under French orders, remained in the positions they had reached in the Warlus area, but in the night they were surrounded and only a few tanks succeeded in breaking out.

;[[SS Totenkopf Division]]
:Elements of the SS Totenkopf (mot) division are facing a British unit defending a bridge on the Scarpe River in the town of Aubigny-en-Artois (15 km west of Arras). In reprisal for this resistance, 98 people from the town are executed by the Germans. The officer in charge, Obersturmbahn Fritz Kuchenlein will be hung on 28th January 1949 for his warcrimes.
:The British tanks had rolled through the positions of Rommel’s forces and found themselves directly in front of the Totenkopf’s antitank guns. The Pak’s crew saw that the 37 mm shells from their guns were ineffective against the Matildas tanks and abandoned their equipment after brief firing. Late in the afternoon both British columns joined and started to drive back the German towards Mercatel and Route Nº 37. The men of the SS-T PzJäg Abt aided by men of the SS-T IR 3 went again after the British tanks but that action also failed after nearly one hour of desperate fight.
:Finally the situation turned in favour of the Germans thanks to the 88 mm guns of the Flak Btl 78. Besides, the PR 25 under Oberst Rothenburg carried out a counterattack on the right flank of the British effort coming from Agnez at 19:00 hours.

Also collaborated in stalling the tanks, the artillery of SS-Totenkopf by firing direct shots over open sights and the air strikes of the Stukas.

;[[German Forces of the Battle of Arras]]
: 3rd SS evidently abandoned its positions in Wailly and showed 'signs of panic' (Guderian). Rommel was busy trying to round up 6th and 7th Rifle brigades to support 25th Pz Reg when the attack started. He couldn't find 7th Bde. He found elements of 6th Bde south of Wailly, and howitzers north of the village were engaging British tanks. The village itself came under MG fire as Rommel reached it. He found that the vilage was jammed with troops and vehicles trying to take cover. West of Wailly were some light AA guns and AT guns again hiding in full cover, and there were some destroyed German tanks. The German infantry and gun crews in the village then broke and ran. At this point Rommel brought up all the available guns, both AA and AT and concentrated their fire on each group of tanks, evidently with some success as the attack petered out. Rommel reports several British tanks destroyed or disabled, and the rest retreating. By the time he got the rest of 6th Rifle reg it had suffered 'very heavy losses in men and material' and he reports the overrunning of their light AT batteries. He organised a gun line between Agny and Beaurains from the Div artillery and heavy AA (88) batteries - according to Guderian there were at most six of these. This finished off the attack in the north, one 88 battery claiming nine kills. 25th Panzer Reg eventually intervened, and Rommel reports the destruction of seven tanks for the loss of nine of his own fighting NW of Arras. He had lost 205 dead or wounded, and 173 missing (presumably the remaining 200 prisoners were from 3rd SS).
!!22 May 1939
;[[French Forces of the Battle of Arras]]
:On 22nd May, the 25e DIM supported by the 38e BCC (45 Hotchkiss H35 tanks at full strength) drives the German 32.ID from the field near Cambrai on the Escaut River, east of Arras. The French breakthrough is important and the Germans engage massive air support to stop it. 18 Dewoitine D520 fighters from GC 2/3 in patrol in the area intercept a Stuka group and 11 Ju87 dive bombers are shot down. But, the French attack is stopped by the intensity of the bombings.
:The same day, general Prioux decides to regroup the cavalry corps in the area of Arras. The I/4e RDP supported byt the 18e RD (1e DLM) leads a brilliant counter-attack which allows to take Mont-Saint-Eloi north-west of Arras. During this attack, the 2e DLM and 3e DLM covered the flanks of the attack.
;[[3e Division Légère Mécanique]]
:At 2:00 a.m., the Cavalry Corps defines the new mission of the 3rd DLM for the day of May 22 in Operation Order No. 145/3 OP. The 3rd DLM must then face its objective by pushing to the Agny - Rivière - Basseux line. The 1st DLM covering its action on its right and rear. The 3rd DLM defines the action in its operation order n ° 70/3 OP of 03:00. But from 5:30 am, the special order n ° 67 of the Cavalry Corps cancels order n ° 145/3 because the 3rd DLM is overwhelmed on its right by the enemy. It must therefore cover itself facing west by relying on the Dainville - Duisans - Etrun - Maroeuil line. It receives in reinforcement a squadron of S35 of the grouping PINON.
:At 9.50 a.m., the Cavalry Corps indicated that the English were withdrawing to Arras and would hold the Biache - Arras line and the Scarpe from Arras to Bray excluded. The 3rd DLM must withdraw north of the Scarpe between St-Catherine and Maroeuil and hold the position until it was relieved around noon by the British brigade. The elements available from the 5th BLM under the orders of Colonel du VIGIER are made available to the 1st BLM to cover the army's flank in the Neuville-Saint-Vaast region, while the 6th BLM must regroup in Arleux -en-Gohelle, the artillery remains under the orders of the British.
:Effectively relieved by the British on time, the 11th RDP regrouped on the side of Bois-Bernard and Drocourt north of Arleux-en-Gohelle and the 12th RC in Plane in the suburbs of Lens. The PC of the 3rd DLM is grouped together in Méricourt south of Lens.
:At 8:00 p.m., the situation and the orders for the next day were received directly by a liaison officer with the Cavalry Corps HQ. The Germans attacking violently in the direction of Béthune with possible infiltrations between Béthune and Souchez, the Cavalry Corps wants to clean this region with the tanks still available of the division, those of the 12th Cuirassiers and 2 tank companies that must be recovered in Béthune , then hold defensively with the 3rd DLM facing north-west the railway line from Lens to Pont-en-Vendin while maintaining the link with the 1st DLM towards Souchez.
When the clocks of Syrtis Major strike three o’clock in the afternoon, the servants, soldiers, and citizens of the Empire engage in a tradition that has marked the British around the worlds of our system as eccentrics — they sit down to drink tea. In Syrtis Major, one of the most popular places to practice this highly civilized activity is the Bradley House.
Six days a week, between the hours of 3:00 to 5:00 PM, many members of the better classes of English society, as well as members of the colonial bureaucracy, senior military officers and those Martians and non-English-men who are either trying to imitate the British or interact with them, gather to sip teas from around the known worlds and to nibble delicately upon pastries, sweets, and small sandwiches and other baked goods, and per-haps most importantly, to engage in a thousand quiet conversations that seem to accomplish more work and close more deals than do all the other hours in the business day.
The Bradley House of Syrtis Major opened its doors four years ago, and has been a popular and posh spot for taking one’s tea ever since. With five different salons to entertain their clientele, and the largest selection of tea and foodstuffs on Mars, Bradley House has held it’s position as one of the finest tea salons in all the Empire. The decor is varied within each individual tea room, from the soft and feminine Princess Room, where many unescourted ladies take their tea, to the darker panelled and more mascu-line Club Room which is the epitome of the Victorian Men’s Club, for the gentleman who wishes to take his repast away from the presence of the fairer sex (thus enabling him to enjoy a good cigar or pipe with his tea); to the Victoria and Albert Porches where couples and groups gather to social-ize and to observe the goings on of the city around them and the well main-tained tea house grounds. Of course, the final room is known as the Impe-rial Room. Located on the building’s second floor, the Imperial gives a wide overview of the city, thanks in no small part to its three-wall window and glass ceiling which allows for the unobstructed view of the cloudships and other aerial vessels that ply the skyways over Syrtis Major. From here, one can look out upon the Residency and the Syrtis Major Cathedral, and in many areas of the city, see the Union Jack fluttering in the winds. Many a Cloud Captain and Naval officer has taken his tea in the Imperial so as to feel that one step closer to the skies that they have come to call their home.
The Bradley House is run and owned by Mr. & Mrs. Theodore and Elanor Bradley, husband and wife merchant speculators from the West Counties of England. Theodore is the son of the Late Sir Hugh Bradley, the tea magnate.
Sir Hugh made the Bradley family fortune speculating in tea and opium shipments to and from China during the 1840’s. At the forefront of the so-called Opium War, Sir Hugh was able to seize upon several lucrative con-tracts involving exclusive rights to certain tea blends. Upon his passing 12 years ago, Theodore became the majority shareholder and defacto owner of the South China Tea Company. Since that time, Theodore has invested wisely, gambled only rarely, and moved to diversify the company’s holdings. The Bradley House is one example of his diversification. Over the last several years, Theodore and Elanor have travelled all across the Earth and to Venus and Mars as well, establishing a Bradley House in every corner of the Em-pire. Plans are now being made to open a Bradley House on Mercury, should the size of the British colony there ever increase to the point where such a business could thrive. With their exquisite decor and furnishings, as well as receiving the benefits of the most modern technologies that Theodore can afford to supply, each Bradley House is able to proudly boast that it provides the exact same quality service and facilities as the first and best known Bradley House, that in London, England. In Syrtis Major the Bradley House advertises itself as a small piece of England on this harsh red planet. As a consequence, Bradley House is the focal point for the afternoon social circles of the higher echelons of Syrtis Major society (Social Levels 4+ would fre-quent such an establishment for Europeans; Canal Martians of Social Level 4+ would also attend if they were attempting to deal with Europeans during the tea time).
Somewhat overlooked but still vital to all aspects of Bradley House is Elanor Bradley. The daughter of Norman Braithwaite, a prominent member of the HBTC Board of Governors, Elanor is possessed of an acute business sense, as well as a most able and charming wit. She is at once the perfect hostess for the most illustrious tea house on Mars, and an able partner in Theodore’s other dealings. She uses her position as the mostly overlooked spouse to advantage in their business deals, and she has learned that many weaknesses in business rivals can be discovered by sharing a pot of tea with the wife and/or daughter of their opposite number in a particular negotia-tion. Elanor possesses a sharp mind and is not afraid to use it, either in conjunction with Theodore or independently.
Of course, when persons of the calibre who patronize Bradley House gather, their conversation is inevitably more profound than that of the lower social castes. Business and political anecdotes are exchanged, and personal information regarding the lives of many of Syrtis Major’s finer citizens are passed to and fro. As such, Bradley House is also a subtle yet intense hot-bed of political intrigue. Many non-English tea guests to Bradley House at-tend the afternoon session for reasons that have little to do with the quality of the wares served. German, French, Belgian, Russian, and even Japanese officials from the various embassies attend the tea house in the hopes of overhearing that vital tidbit of information that will give their nation an ad-vantage, however slim, in dealing with England. As well, the large number of patrons coming and going on a daily basis make the Bradley House ideal for the agents of many nations to pick up or drop off information concerning their covert activities. One of the waiters on the staff is actually an agent in the employ of Germany, while another is a Fenian sympathizer who passes information concerning British military activities to Colonel O’Reilly (see TRMGS #1)! Both of these NPCs are briefly detailed at the end of this article.
The native Martians as well are not immune from this sort of skulduggery, as Ground Cleansers, Worm Priests, and the Oenotrians have found it useful to maintain ears within Bradley House amongst the staff of the largely ignored native busboys The Bradley House can easily fit into your Space: 1889 game, be it on Mars or anywhere else. It could be placed in another city if you do not use Syrtis Major, or it could even be the original Bradley House back in Jolly Olde England itself. Wherever you place it, one could easily find British Gen-erals stopping by for a spot, or perhaps the dashing Burnaby (in the city on a temporary layover) is being brought to the Imperial Room by the local Naval Garrison Commander. At the table next to you, the local official of the HBTC could be trying to persuade a Canal Martian Merchant Prince to make certain trade arrangements that are supposed to be profitable for both of them. In a more sinister vein, that rather pretty and frail looking young lady and her rather empty-headed brother may very well be German Agents drop-ping off information for onward transmission to the embassy (via the waiter) or they could be picking up new orders (wrapped up in their napkins of course) directing them to commit some new anti-British scheme on behalf of Baron Von Gruber. If you are completely outlandish, you could have Prince Edward (heir to the British Throne) and his retinue stop in for a lark and to mingle with the “common folk”. Or perhaps the Duke of Clarence is here to make a quiet rendezvous away from the press and the ever watchful eyes of the Queen. Anything can happen here and anyone may show up.
As a final note, remember that tea time was something that was nearly sacred to the Victorian English. Everyone from the Queen to the most com-mon labourer took time out for tea, and throughout the Empire, such habits were passed on to the native peoples and the other members of the colonial establishment. Tea time was the focus of many people’s lives, regardless of social station, and Space: 1889 players should become tea lovers too (or at least their characters should!). Whether your character is there for the tea or for the tidbits, Bradley House is an interesting and fun place to spend a couple of hours. So sit back, relax, enjoy the fine foods, and oh — try not to slurp your tea.

!!!NPCS
;Theodore Bradley 
:Age 44; 2 x Merchant Career; Motives:Mercantile, Responsible Elanor ;Bradley 
:Age 37; Merchant, Dilettante Traveler; Motives: Wise, Love Michael the ;Waiter (Wolfgang Krueger) 
:Age 27; Army, Foreign Office Agent; Motives: Steady, Ruthless 
;Colleen the Tea Cake Girl (Fenian Spy) 
:Age 20; Personal Servant; Motives: Love, Hatred 
;Kasraddic Magalenthrix (Martian Busboy/Spy) 
:Age 30; 2 x Thief Career; Motives: Liar, Hatred
;Source
:https://www.myminifactory.com/users/TheLazyForger

[img[The Lazy Forger - Village Pack.image]]
[img[The Legation Compound at Syrtis Major.image]]

1. VICTORIA BOULEVARD
Dividing the Legation Compound along its long axis is Victoria Boulevard, a wide thoroughfare paved in cobblestones. The compound is divided along the short axis by Victoria Park, a true little touch of England that separates the legations into two clusters. The park is noted for its walking and riding trails and is most famous for the pond (1A) stocked with swans. The north-ern edge of the park is bordered by Victoria Boulevard and on the south by Mayfair Avenue. Across Victoria Boulevard from the park is a row of fashion-able shops (1B) catering to the legation population. Along Mayfair Avenue are the most sought after apartments in Syrtis Major. They are so attractive that the consulate of the Kingdom of Siam purchased the easternmost pair of flats (1C). They use one for the Consulate and one for the Consul General’s residence.
2. THE EMBASSY OF THE UNITED STATES OF AMERICA
Those Americans somehow managed to locate their embassy compound on the eastern end of the park. This affords the ambassador a grand view from his office window. The Americans have three buildings in their compound: the Embassy itself, the Ambassador’s residence, and a stable for three horse drawn carriages. Over the stable is a small barracks that houses the Marines who guard the compound.
3. THE DUTCH CONSULATE
This rather large structure originally housed the Belgian Embassy in addition to the Dutch representative. Conflict over Belgian activities in the Coprates caused King Leopold to eject the British Ambassador from New Amsterdam, leading in turn to the Belgian Ambassador leaving Syrtis Major, along with his staff. The Dutch Consul-General now handles all affairs for the Belgians in Syrtis Major, including the issuing of permits for travel to the Coprates
4. THE GERMAN EMBASSY
The German Legation is located facing Empire Park in the west end of the compound. It is separated from its neighbors by narrow cobblestone streets.
The streets are more lane than street and are found through out the Lega-tion compound providing access to those entrances not serviced by Victoria Boulevard. They are used by tradesmen to gain access to the rear of the various Embassies. (For a detailed description of the German Legation see the Space: 1889 main rulebook.)
5. CONSULATE OF THE AUSTRO-HUNGARIAN EMPIRE
The Legation of the Austro-Hungarian Empire is in the south-west corner of the Legation Compound. Consisting four buildings, the Austro-Hungarian is typical of most of the legations of the major European Powers. It consists of a large square two story structure that houses the Embassy, a block of stables, a two story stone building facing the German Legation that contains the trade mission on the first floor and a barracks on the second, and a two story house for the ambassador and his family.
6. RUSSIAN EMBASSY
Larger than all but the Foreign Office building, the Russian compound domi-nates the northwest corner of legation area. The stone and marble three story “C” shaped embassy sits in the middle of the site overlooking the wide drive leading to the front door. A suspiciously large trade delegation occu-pies a proportionally large structure, a 2 story “L” shaped building backing on Princeton Lane. The other buildings are an ambassador’s residence and a small stable.
7. ITALIAN LEGATION
8. THE HOLY SEE ON MARS
The Italian Legation and the Holy See on Mars are similar small compounds, each consisting of a two story embassy and an ambassador’s residence.
9. APARTMENT BLOCKS
The two blocks of flats between Princeton Lane and Baker Street were origi-nally intended to be a group of three story townhouses. During construction the builder realized that he would be able to realize more in rents from flats than from town homes. This left the facades for the town homes in place creating two very elegant blocks. All the flats have running water and indoor water closets along with complete kitchens. Servants quarters are on the first floor. Baker Street has become a favorite address for would-be detec-tives who hope that the connection with the more famous street in London and the proximity to the legations will bring them clients.
10. EMPIRE SQUARE
Occupying the center of the western cluster of legations is Empire Square. It is a small plot of Earth grass that divides Victoria Boulevard, forcing traffic to travel around the Square. Rising Majestically over the square is the Eye of Ramses: a 35 foot tall obelisk made from polished native stone. At sunset the obelisk seems to glow blood red, reflecting the sun almost in a crystal-line manner. This phenomenon has given rise to a small but dedicated cult of Canal Martians who believe that the “red men” have created the means of their own demise. They have come to the conclusion that one day the red glow of he obelisk will grow so strong as to sweep all the Europeans off Mars.
11. LEGATION PLAZA
If one approaches the Legation Compound from the north, one must cross Legation Plaza. This vast open area paved with white stone supposedly dates from the time of Seldon. On weekdays between the hours of eight in the morning and noon an open air market catering to the residents of the Lega-tion Compound operates. In the afternoon the English garrison parades on the plaza in a traditional show of strength.
12.  THE BARRACKS
North across Victoria Boulevard is the Legation Barracks, home to two com-panies of the South Wales Borderers, who serve as guards for the com-pound. A joke among the residents of the legation compound is that the troops are there to watch the Americans to make sure they don’t ship every-thing that isn’t nailed down back to Earth. There is an officers mess and quarters, armory, and a stable. The officer’s mess is a two story building connected to both the basement of the armory and the other ranks bar-racks by a series of tunnels. The first floor of the officer’s mess contains a large formal dinning room and sitting room, as well as a fine kitchen. The second floor contains sleeping quarters for up to ten officers. For those in the Legation Compound an invitation to dinner at the officer’s mess is prized.
The chef is the same one used by the Foreign Office on Mars for official functions. The food for those function is superb, but he truly excels in the more intimate setting of the officer’s mess. Other ranks have a two story whitewashed brick building that faces the parade ground. The first floor houses the day room, sergeants mess, and the general mess.
13. APARTMENT BLOCKS
Located north of the clubs is a group of apartment buildings, all some three stories in height. There are four apartments per floor ranging in size from one bedroom to four bedrooms in size. The building itself is interesting in that it was converted from a Martian slaughterhouse. Even so, the apart-ments have the spacious and yet comfortable feel of a quality London Flat.
They are the favorites of the trendy up and comers at the Foreign Office.
Indeed, the Permanent Secretary to the Minister for Foreign Affairs on Mars has taken residence in a four bedroom flat over looking the Barracks and the clubs. One of the buildings closest to the Foreign Office building has been taken over by the Foreign Office on Mars staff for additional office space. It is considered to be a career ending move to have your office as-signed to the annex. 14. CLUBS
In the eastern end of the Legation Compound located between the Portu-guese Legation and the apartment buildings is a block of three nearly iden-tical buildings that house clubs catering to legation compound residents.
The Empire Club caters to an exclusive clientele of the gentry who hold Foreign Service careers. Foreigners are most likely to belong to the Conti-nental Club. Those who cannot meet the stringent membership require-ments of the other two clubs are members of the Mayfair Club. All of the clubs are furnished in the same manner, though the level of appointment are equal to the status of the establishment. The buildings all have two sitting rooms on the second floor, with many overstuffed chairs for mem-bers, and a large dinning room that serves lunch and dinner on the ground floor. All the clubs have several small rooms for members who are forced to stay over night.
15. FOREIGN OFFICE ON MARS
Normally the Foreign Office would only have a small liaison office at a colo-nial capital. However, due to the distance to Earth and the number of other powers on Mars a larger presence is maintained. The Minister for Foreign Affairs on Mars (who holds the rank of deputy Minister of Foreign Affairs in the Foreign Office) also has been given the post of Ambassador to Mars. He has some limited authority to make foreign policy decisions concerning Mars.
This has brought him into conflict with the Governor General more than once. To provide support for the Minister, a large bureaucracy works in the Foreign Office Building and it’s annex. As it is the role of the Foreign Office on Mars to deal with foreign powers the Ministry was located in the legation compound.
Dominating the eastern end of the Legation Compound, a massive three story U shaped building sits in isolated splendor. The foyer of the Foreign Office building is typical of any of the Ministries in London. The first thing a visitor will notice is the ornate three story lobby complete with information desk and security guards. One cannot reach the offices without showing a pass or registering at the information desk. Once past the information desk the offices can be reached by either the stairs or the lift, one of the few on Mars. Junior officers have small sparsely furnished offices, the larger ones being reserved for senior staff.
16. RESIDENCE OF THE FOREIGN SECRETARY FOR MARS
Adjacent to the Foreign Office building is the Minister’s residence, a two story building in the Mediterranean style with wide verandas. Since the new Minister did not find his second floor bedroom cool enough for sleeping, he had one of the rooms in the basement converted to a private sleeping room.
He has offered a bonus to anyone who can build him a cooling machine for his quarters. Formal dinners are held in the first floor dining room around the great table. Made from the deck planking of a downed Martian flyer, it seats 38 or 40 in a pinch. When receiving for smaller groups, the Minister has one of the sitting rooms converted to a dining room. If he desires to have personnel guests he can put them up in one of the five bedrooms on the second floor, including the one he no longer uses.
17. SPANISH LEGATION
Next to the Portuguese Consulate is the small Spanish Legation. There is a small embassy building and a residence for the Consul General. The Span-ish, like the Italians, have a very small presence on Mars and their embassy is sized accordingly. A visitor to the embassy should take note of the two Goyas on display.
18. PORTUGUESE CONSULATE
Much to the chagrin of the Spanish the Portuguese built their Consulate larger than the Spanish. Not only is the Consulate building larger than the Spanish Embassy but the compound contains an additional building. The third structure houses the Portuguese trade delegation, whose sole function seems to be managing the cork trade.
19. FRENCH LEGATION
Second only to the Russian Embassy, the French Embassy sits in the south-east corner of the Legation Compound. They have built an Louis XIV Em-bassy in all the glory that was France of the end of the last century. Adding to the splendor is the Ambassador’s residence in Martian stone and French gilt. The Trade Delegation is almost as large as the Embassy, but it was constructed in a imitation Martian style that some have found offensive in middle of the Legation Compound. The French reason for building it in this style is quit pragmatic, as they would say, “We trade with Martians and they feel more at home here so they are more willing to bargain.” The French have a full platoon of infantry stationed here, the largest of the garrisons. To house them they have built a two story barracks.
20. THE ADVENTURERS CLUB
One might ask why is there an Adventures Club when there is an Explorers Club? To find the answer just ask any non-Englishman and he will tell you that he can not join the Explorers Club. As a result, a small tavern in the legation compound that had been a meeting place for a group of American adventurers was converted into the Adventures Club. Though the member-ship has increased to the point that there is some strain on the facilities, there is no pressure to leave the Legation Compound as it is the home of “Foreigners”.
21. THE TYLER FOUNDATION
This is the original building used by the foundation, though most of it’s offices are now elsewhere.
22.  THE ROYAL MARTIAN GEOGRAPHICAL SOCIETY
This unassuming building houses the main offices of the Society, as well as the editorial offices of the Transactions of the Royal Martian Geographical Society.

;Source
:https://www.napoleon-series.org/resources/the-nafziger-collection-of-napoleonic-orders-of-battle/#1600880868474-4d6485eb-3868

;Example
{{Nafziger Collection - Napoleonic Orders of Battle - France - French Army, 26 August 1805.pdf}}

//“There is one thing that separates the British Empire in the late 19th century from all previous empires. It is not its size: while large it is not the largest that ever was. Neither is it the fact that the sun never sets on it: several other colonial em-pires claimed that distinction well before the British did. No, what distinguishes the empire created in the name of the English Crown is the careful attention her Majesty’s govern-ment has paid to the question of communications. The world-wide net of telegraph cables that links the Empire on Earth allows the close coordination of imperial policy between En-gland and the colonies, and prevents the lack of control from the center that has caused the breakup of so many empires in the past. That same telegraphic net has been established in the Martian Crown Colony, and with the completion in 1882 of the orbital heliograph stations orbiting Earth and Mars, the entire empire was linked. The triumph of the British Em-pire is not its military might, great as that is, nor is it its wealth, the greatest the world has ever seen. The true tri-umph is the telephone and telegraph system that links the Queen’s dominions, binding them all to the Queen’s service.” 

James Thurston Brown, Presidental Address to the Royal Elec-trical and Etheric Engineering Society, London, 1889.//

TELEGRAPH SERVICE
The Royal Parhooni Telegraph Service links all of the cities of the British Crown Colony. The telegraph lines run along the sides of the canals linking the cities, and branch lines extend to all villages and towns along the route.
The only British controlled city not linked by the telegraph system is the line to Shastapsh; it was under construction at the start of the Oenotrian War and work has been suspended pending the war’s completion.
A message costs two pence per word; there is a one shilling (ten word) minimum. Messages are delivered at no extra charge within city limits; deliv-ery by letter to individuals outside of cities is available for an additional charge. It is customary to tip the delivery boy a few pence.
Each of the three field columns in the Oenotrian campaign has a dedi-cated telegraph line connecting it with Army Headquarters in Syrtis Major.
These have proved invaluable in coordinating Her Majesty’s forces, and have prevented a number of reverses. Of course, commanders in the field often complain about being under the thumb of the high command.
Expeditions in the area around the Crown Colony may wish to take ad-vantage of the Telegraph Service’s ability to connect them with civilization.

The Royal Parhooni Telegraph Service allows the connection of private lines to its outlying lines for a flat fee of five pounds per month or fraction of a month; this fee includes the services of a company trained operator. Expe-ditions are responsible for building and maintaining their own line from the company’s line to their campsite. The cost of wire and telegraph instru-ments is listed in the Space: 1889 rulebook; purchase prices on Mars should be at least double those given there. Building a line is an Easy task; roll against the Electricity skill once per day during construction. Failure means that an additional day must be spent tracing down the problem. If none of the player characters have electricity skill (What, no one is playing an Inven-tor?!), the operator supplied by the telegraph company has an electricity skill of 1.
The only other major telegraph system on Mars is in the Belgian Coprates.
A number of Martian states are in the process of building systems, most notably the Boreosyrtis League and the Tossian Empire. The Tossian system is being planned and built by engineers of the Western Union company of the United States. On Venus, the German colony has established a small telegraph network, noteworthy primarily for its use of insulated submarine cable to withstand the rigors of the Venusian climate.
TELEPHONE SERVICE
Parhoon, Gorovaan and Syrtis Major all have telephone systems. The systems share a number of characteristics. All calls are placed through an operator. Connections can be made only within town; there is no long dis-tance service. However, one can call the telegraph office and have a tele-gram sent to another city. A long distance line was in the process of being built between Syrtis Major and Parhoon, but the Oenotrian War has delayed its completion indefinitely.
Syrtis Major has the most developed telephone system despite the short time the British have ruled the city. This is due in large part to the competi-tion between the two telephone companies in town. One, the Postal Tele-phone Service, is owned and operated by the British government. The other, the Syrtis Major Bell Telephone Company, is a private firm, operating under a charter granted by Prince Amraamtaba X in 1881, prior to the British take-over.
The Postal Telephone Service links all government offices of the Crown Colony, including the military barracks and the dockyards. All of the embas-sies also subscribe to this company’s service, as do most branches of the Martian city government. The one exception is, of course, the Emerald Pal-ace, the residence of Prince Amraamtaba. The Prince refuses to recognize the existence of the British government’s telephone service, and his tele-phone is connected only to the Syrtis Major Bell system. Likewise, the Brit-ish administration has been forbidden to use the Syrtis Major Bell lines, and as the two systems are not connected, the Residency and the Palace cannot talk to one another by telephone. Instead, all communication between the two administrations takes place by foot messenger, allowing the Prince a way of twitting the British administration in a small (very small) way.
In addition to the Emerald Palace, Syrtis Major Bell is also linked to most of the commercial establishments in the city, especially in the British quarter (the North and Northwestern parts of town). Its service is better and its rates are lower than the Government system, so it is the prefered service of those who work for a living. In addition to businesses, professional men such as doctors, lawyers and the like also have telephones, as do members of the upper classes (Social Level 5 and 6 in game terms). Most hotels sub-scribe to both telephone companies as a service to their guests. In addition, both companies maintain offices in the center of the British commercial district where calls can be made for a small fee (four pence for a three minute call).
The telephone systems in Parhoon and Gorovaan are both run by the British Postal Service. The system in Parhoon is quite well developed, serv-ing both government and private businesses, and is used by British and Martians alike. The system in Gorovaan links only government offices and a few British commercial establishments. Martians, most of whom resent the British occupation of their city, do not use the system at all. The rates in both cities are the same as for the Postal System in Syrtis Major.
The only other operating public telephone system on Mars is that in Thymiamata. A subsidiary of the Bell Telephone Company, Thymiamata Bell has as its primary customers the American merchants who now dominate trade in that city. The city government and the American armed forces sta-tioned there are also connected to the telephone exchange.
In addition to the public telephones systems described above, there are a number of private networks. Several Martian Princes with progressive views have installed telephone systems in their palaces. The hereditary traders association of the Boreosyrtis League has purchased a telephone exchange, which is presently being installed in the League’s auction center in Meroe.
Of course, small networks may exist under special circumstances elsewhere on Mars, but they are rare and should not be encountered by players very often.
RATES
    Postal System     Bell System Installation £2 £1 Monthly Charge* 2/— 1/6 Per Minute 1.25 d 1 d *includes 20 free minutes of use Note: These rates are higher than those prevailing on Earth at this time; this is due to the high cost of transporting the equipment to Mars.
THE ORBITAL HELIOGRAPH SYSTEM
Her Majesty’s Orbital Station Forsage is the Martian part of the helio-graph system that links that planet to Earth. The Forsage, hovering in ares-stationary orbit over the Crown Colony, transmits to and receives messages from its sister ship in Earth orbit, the Harbinger. After being received from Earth, all message are transmitted by heliograph code from the Forsage to an operator on the roof of the British residency. After decoding, they are reviewed by military censors and then passed on to the local postal system for delivery.
Sending a message via the heliograph is very expensive, so it is most often used for urgent governmental or business communication. The rate is one pound per word, with a ten pound minimum. Most firms use commonly available commercial codes where one word stands for an entire sentence or concept. Developed for use on the transatlantic cable, these codes cut costs a great deal. For those not concerned with speed, letters can be sent on board the regular ether liners that travel between the Earth and Mars.
The cost is normally about two shillings an ounce for letters or small par-cels. Delivery takes at least two months.
As one might imagine, the monopoly on communication that the helio-graph system gives has been of great value to the British Crown. By control-ling the rapid flow of information, the British government is in position to react more swiftly than other administrations on Mars to changes on Earth.
Unfortunately for the British, this control is not complete. The light beam from the Forsage is not extremely tight, and with a powerful telescope it can be seen in most of the Crown Colony. It is no accident that astronomy is a very popular hobby for all of the staffs of the various foriegn embassies, and that the sounds of calculating engines can be heard along embassy row all day long working to decode the messages that the British censors didn’t pass along.
One rumor about the Foresage is not true: she is not a spy ship. Al-though the Oenotrian Empire, supported by the German government, has repeatedly claimed that the Foresage has been using its telescope to follow troop movements in the ongoing war, the truth of the matter is that the Forsage’s orbit is much too high to allow effective observation. Rumor has it, however, that there are small black-painted ether flyers that have been seen in locked hangers at the Royal Navy Yard. Of course, the authorities dismiss these stories as the result of reporters’ overactive imaginations.
ADVENTURE IDEAS
The most common use of the telegraph system is to serve as a way of delivering messages to the players, either to summon or to warn them. Any sort of major expedition near the Crown Colony will string a telegraph line along. See the “Secret of the Pyramid” adventure in this issue for ideas along those lines. Of course, the players might also be sent out to find out why a message hasn’t been received from an expedition.
Being hired to install a telephone system is an excellent way to get a group of characters to a distant city. This might be just an excuse to get them ambushed, or the installation itself might be the adventure, with crazed Worm Cultists believing the players are constructing a device to extract Mar-tian souls through the wires or some such nonsense. Just drive them crazy as they try to install things on time and under budget.
The Foresage can serve as a center for adventures (plans for the station and its sister ship the Harbinger are given in GDW’s Tales from the Ether), especially if the characters own an ether flyer. The arrival of a mysterious heliograph message, delivered to the characters by mistake or design, can be the start of a tale of intrigue and death. And just what are those mysteri-ous black ether flyers doing in the Syrtis Major Naval Yards? We might just tell you someday (or next issue).
Bhutan Spice. The mere name conjures the sweeping vistas of Mars, ancient canals flowing through decadent cities, the billowing sails of cloudships as they Majestically course through the skies as they carry in their holds the wealth of the Boreosyrtis League—Bhutan Spice.
Yet what is this wonderfully exotic and mysterious Spice? In its pure form it is almost priceless. Diluted in varying degrees the Martians use it a myriad of ways from smoking it to using it to flavor food. In its purer forms it has a mildly narcotic effect not unlike alcohol and many humans believe that it also acts as a powerful aphrodisiac.
Little is known about how Bhutan Spice is grown for the Martians of the Boreosyrtis League jealously guard their secret. Few humans have ever seen the immense plantations where the Spice is grown and processed. Those who survived to tell the tale only got close enough to see that the Spice was harvested by gangs of slaves guarded by Martians with rifles.
The Spice is processed from the seed pods of the Bhutan vine that grows only in the soil and climate of the Boreosyrtis League. Gangs of slaves are driven into the fields to prune the seed pods in the days before they mature. Only slaves can be induced to perform the labor of cutting the seed pods due to certain parasites native to the Bhutan plant. As these parasites gain entry into the Martian workers through cuts caused by the thorns of the plant, they cause increasingly acute paranoia, dementia, and excruciating pain. Many slaves chew the seed pods to blunt their agony, but in the end this only accelerates their inevitable madness. Occasionally a field slave erupts in a pain-driven, violent rampage and must be shot down like a mad dog by the guards.
The harvested seed pods are then taken to a processing center on the grounds of the plantation. In the process of grinding and refining the seeds into Bhutan Spice the parasites are killed, making the Spice safe for Martian and human consumption. The ratio of seed pods to finished pure Spice is quite high, something on the order of 5000 to one by weight. As a result, Martian planters find it necessary only to guard their processing centers as it would not be cost effective (and downright dangerous) for pirates to attempt to steal the Spice at any stage in the process before the finished product.
!Greetings Subaltern,

Congratulations on your assignment to your Regiment. I appreciate that this is a new and challenging time especially with your arrival just before we move into action. You will be replacing Subaltern Johnson, who we lost to the larva fly infection he was suffering from.

!!Your Company

Your Company is represented by two stands of six figures on each stand. Each figure represents 10 men.

!!The Battalion

The Battalion is formed from five Companies, for a total of 60 figures.

As you experienced when you reported to the Depot Battalion, the Regiment only deploys one Battalion and leaves the remaining Battalion to forward recruits and replacements.

As such, you will notice that the Regimental Colonel will be represented as the mounted commander when the Battalion is deployed. He doesn't really do anything but look good and dashing while deployed.

When the Battalion is deployed, you will see that it is in either ''Column'' or ''Line'' formation. Sometimes Companies will be dispatched and as a force they too would deploy in the same formations.

!!The Cavalry

You might see these prancing fancies deployed to support in their Squadrons of 12 figures. I doubt you will actually see a whole Regiment of up to four Squadrons and their Regimental Colonel at the same time. If you do, they would also be deployed in ''Line'' and ''Column'' formations.

!!The Artillery

The artillery Battery would consist of three field pieces and their crews. You will hear tell by the red legs themselves that the effectiveness of each field piece section depends on how many crew are with each gun.
{{Imperial Thor-class Frigate}}
{{Imperial Thunderbolt-class Heavy Frigate}}
{{Imperial Tiamat-class Battleship}}
```
[
{"text":"TEXT with \n as line break","type":"text/vnd.tiddlywiki","title":"TITLE","tags":"[[TAG]] [[TAG]]","modified":"20000000000000000","created":"20000000000000000","fieldname":"FIELDDATA","tw_folder":"TOPICFOLDER"},
{"text":"TEXT with \n as line break","type":"text/vnd.tiddlywiki","title":"TITLE","tags":"[[TAG]] [[TAG]]","modified":"20000000000000000","created":"20000000000000000","fieldname":"FIELDDATA","tw_folder":"TOPICFOLDER"},
]
```
;List all references to the operation of a TiddlyWiki here

A key capability of WikiText is the ability to make links to other tiddlers or to external websites.

! Manual Links

Link to a tiddler by title:

```
[[Tiddler Title]]
```

To link to a tiddler and specify the text of the link:

```
[[Displayed Link Title|Tiddler Title]]
```

You can also create a link from the editor toolbar. Click ''link'' (<<.icon $:/core/images/link>>), and search and select a tiddler.

! ~CamelCase Links

For tiddler titles that match the CamelCase rules, just typing the title without double square brackets will automatically create a link.

You can suppress a link from being recognised by preceding it with `~`. For example:

<<wikitext-example src:"* ~HelloThere is not a link
* ~http://google.com/ is not a link">>

! External Links

To link to an external [[resource|https://en.wikipedia.org/wiki/Web_resource]] such as a website or a file, type its //full// [[URL|https://en.wikipedia.org/wiki/URL]], including the [[URI scheme|https://en.wikipedia.org/wiki/URI_scheme]] such as a protocol (e.g. `http://`, `file://`) or `mailto`:

```
https://tiddlywiki.com/

[[TW5|https://tiddlywiki.com/]]

[[Mail me|mailto:me@where.net]]

[[Open file|file:///c:/users/me/index.html]]
```

For this syntax to work, the URL has to be recognisable as a URL. Otherwise, it is treated as a tiddler title. As a result, in case you want to link to a resource locatable using a relative path, use the extended syntax:

```
[ext[Open file|index.html]]

[ext[Open file|./index.html]]

[ext[Open file|../README.md]]

[ext[Open file|c:\users\me\index.html]]
```

The extended syntax still works with full URLs, although in that case it is not necessary:

```
[ext[https://tiddlywiki.com]]

[ext[TW5|https://tiddlywiki.com]]

[ext[Mail me|mailto:me@where.net]]

[ext[Open file|file:///c:/users/me/index.html]]
```

You can also use the extended syntax to force an external link:

```
[ext[Donate|bitcoin:1aabbdd....?amount=0.001]]
```

! Customising Tiddler Links

See the LinkWidget for details of the underlying widget used to implement tiddler links, including macros that can be used to customise its behaviour.


The <<.def timeline>> [[macro|Macros]] returns a list of tiddlers in reverse chronological order of modification (or some other [[date field|Date Fields]]), grouped by day.

!! Parameters

;limit
: The maximum number of tiddlers to include, defaulting to 100. But if <<.em any>> tiddlers are included for a particular day, <<.em all>> of the other tiddlers for that day will also be included -- even if this exceeds the limit
;format
: A string specifying the desired [[format|DateFormat]], defaulting to `DDth MMM YYYY`
;subfilter
: An optional extra [[filter step|Filter Step]], e.g. `tag[MyTag]`
;dateField
: The name of the date field to use, defaulting to `modified`

The tiddlers are selected by means of a [[filter expression|Filter Expression]], into which the <<.param subfilter>> and <<.param limit>> parameters are spliced as follows:

> `[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]`

<<.macro-examples "timeline">>
Wait for the email to access the forum to then run the 2-pack that I already purchased.

Run two accounts on the desktop and then 2 accounts on the laptop when I am at work.

Unique Code --- Registration Key

9851BF06C3 --- B3AGYKE9CV

Honestly does not work too well. I would be better to just write my own AHK scripts.
<<todolist-ui caption:"To Do List" base:"sidebar">>
When we wish to correct with advantage, and to show another that he errs, we must notice from what side he views the matter, for on that side it is usually true, and admit that truth to him, but reveal to him the side on which it is false. He is satisfied with that, for he sees that he was not mistaken, and that he only failed to see all sides. Now, no one is offended at not seeing everything; but one does not like to be mistaken, and that perhaps arises from the fact that man naturally cannot see everything, and that naturally he cannot err in the side he looks at, since the perceptions of our senses are always true.

//''People are generally better persuaded by the reasons which they have themselves discovered than by those which have come into the mind of others. ''//

:://Blaise Pascal//
@@color:purple;''Important'': Adding my library does not pre-install any of my plugins in your wiki but just adds a reference to it, i.e. you need internet access to actually install plugins from it.@@

Drag this tiddler to your wiki to access my plugin library from your [[control panel|$:/ControlPanel]]: $:/pluginlibrary/tobibeer/official

<<<

!! {{$:/pluginlibrary/tobibeer/official!!caption}}

//{{$:/pluginlibrary/tobibeer/official}}//

{{$:/pluginlibrary/tobibeer/official!!url}}
<<<

@@.note
''Tip:'' You can actually try it out right here in this wiki.<br>
Open: {{$:/core/ui/Buttons/control-panel}} ''~ControlPanel'' > ''Plugins'' > ''Get more plugins'' > ''Open plugin library''
@@
@@.image-float-left <div class="tc-table-of-contents"><<toc-selective-expandable 'Eve Online' !sort[modified]>></div> @@<br>

YOURTEXT


<div style="clear: both;">

;Source
:[[https://kookma.github.io/TW-TOC/]]

!! What is TOC plugin?
<<<
<$transclude tiddler="$:/plugins/kookma/toc/readme" mode=block />
[img width=64px class="float-right" [coffee-cup.svg]]
<<<

!! Install
<<<
;Packaged plugin
#Drag and drop $:/plugins/kookma/toc into your wiki
#Save and reload your wiki (for TW 5.1.21-)

;Client-Server installation (separate files)
*For Node.js (server version) download the utility folder from [[source|https://github.com/kookma/TW-TOC]] folder and paste in your Tiddlywiki plugins folder
*For local installation put the utility folder into your local plugins folder under your wiki folder

//It is highly recommended to backup your data before trying any new plugin! Do it before installing TOC plugin//
<<<

!! Tutorials
<<<
[[TOC Tutorial]] is a good point to start. Also have a look at individual demo.

<<list-links "[tag[demo]prefix[demo]]" type:ol>>
<<<

!! History
>{{latestChange}}


!! Acknowledgement
<<<
* Eric Shulman
* Mat
* ~TonyM
* PMario
<<<

!! Reference
<<<
* http://kookma.toc.tiddlyspot.com/
* https://groups.google.com/d/msg/tiddlywiki/RTzc2MGT__Y/KlPVMP5tEwAJ
<<<

!! License
<<<
* [[Distributed under an MIT license|$:/plugins/kookma/toc/license]]
<<<
Below is a demo of TOC plugin macros and instructions for using them.

<<tabs tabsList:"[tag[demo]!has[draft.of]]" default:"demo/twolevel-toc-nonrecursive" class:"tc-vertical">>
{{Imperial Torrent-class Battleship}}
{{Dark Eldar Torture-class Cruiser}}
<h2>{{!!forces}} <$transclude tiddler={{!!icon}}/>  <$link> <$transclude field="title"/></$link></h2>

@@.list-tree
*''Battalion Headquarters''
**//Headquarters & Laffly//
*''2x Company''
**//Laffly// ^^Command^^
**2x //75mm CAM40//
@@
\define conctitle() {{$:/state/unit-force-name}}
\define conctext()

<h2>{{!!forces}} <$transclude tiddler={{!!icon}}/>  <$link> <$transclude field="title"/></$link></h2>

@@.list-tree
*''Headquarters''
**//Headquarters & TRANSPORT//
*''Company''
**UNIT ^^Command^^
**2x UNIT
@@


\end

<$edit-text tiddler="$:/state/unit-force-name" tag="input" default="Enter Force Name"/> 

<$wikify name="newtitle" text=<<conctitle>> >
<$wikify name="newtags" text=<<conctags>> >

<$button>
<$action-sendmessage $message="tm-new-tiddler" title=<<newtitle>> tags=<<newtags>> text=<<conctext>> icon=<<concicon>> forces=<<concforces>>/>
<<newtitle>>
</$button>

<$list filter="[tag[TAG]]">
<h2><$link><$transclude tiddler={{!!icon}}/> <$transclude field="title"/></$link></h2>
<$transclude mode="block"/>
</$list>
<$transclude tiddler="tableWikitext" mode="block"/>
<$list filter="[tag[Research]tag[Journal]!sort[created]]">
<br/>
<h2><$link><$transclude field="title" mode="block"/></$link></h2>
<$transclude field="text" mode="block"/>
<br/>
<hr/>
</$list>
;Task
:Look to make a series of Waypoints from 3I-NOV to Jita 4-4 that would allow me to avoid gate camps with a Blockade Runner or Deep Space Transport.
:Also see if it is possible to save a travel path for future runs.
{{Imperial Turbulent-class Heavy Frigate}}
!Skills

;Acrobatics
:This skill makes the character more adept at grappling and avoiding diving blows, as well as recovering from falls. An Average roll will allow the character a one-step favorable shift to Unarmed Martial Arts when attempting to grapple an&nbsp;opponent, while a Difficult roll will allow the character a one-step favorable modification when to escape an enemy's grapple or&nbsp;avoid a diving blow. An Impossible roll allows a two-step favorable modification. A successful Formidable roll allows a one-step&nbsp;favorable modification in general Armed or Unarmed Martial Arts rolls.

:Other possible uses include as a modifier to Dance; to avoid injury from a bad jump using the Jumping proficiency (allow a Difficult: Acrobatics roll to avoid injury), or to avoid injury during a botched PLF (Parachute Landing Fall) (allow a Formidable:&nbsp;Acrobatics roll to avoid injury under such circumstances). Acrobatics is an Agility-based skill.</p>

;Act/Bluff
:Closely allied with Disguise, Act/Bluff is the ability to convincingly pretend you are something you are not. For actors, it means portraying a fictitious character, of course, but it also covers such things as effectively pretending you are holding a&nbsp;winning hand at poker or convincing voters that you will fulfill your campaign promises. This skill is also useful for making your way&nbsp;through checkpoints, spying, etc. Difficulty roles will depend on the complexity of the role and the other skills the character&nbsp;possesses, such as Language, Disguise, Leadership, Persuasion, Streetwise, etc. Act/Bluff is a Charisma-based skill.


;Admin/Legal
:The character with this skill has experience with the workings of government, bureaucracy, and the legal system. An Average skill roll will allow the character to discern the basic laws and procedures of everyday life in a community after&nbsp;two hours interacting with the populace. Most paper work can be successfully done with an Easy roll, more complex paperwork,&nbsp;such as tax returns, may take anything from Easy (1040EZ) to Formidable (tax paperwork for a major corporation). A Difficult roll&nbsp;will allow the character to step into a new settlement and avoid police harassment (this may be increased in difficulty for towns with&nbsp;draconian or arbitrary laws, and may be decreased as the character gains familiarity with the settlement).

:In places where anyone cares about rank, the character may increase his chances of being promoted at the appropriate time by one step with a Difficult roll, or two steps with an Impossible roll.</p>
:A character who also has the Forgery skill may increase the effectiveness of his forged papers with this skill: one level with an Average roll, two levels with a Formidable roll, and three levels with an Impossible roll or Outstanding Success.</p>
:Catastrophic Failure with this skill could lead to anything from botched paperwork to arrest and imprisonment (or worse).</p>
:The controlling attribute for Admin/Legal is Education.</p>

;Animal Training and Handling
:The character may train one type of animal per three levels of the skill possessed (skill level + Education score). Skills are Easy to teach to animals if four weeks are spent on each trick, Average if three weeks are&nbsp;spent, Difficult if two weeks are spent, Formidable if two weeks are spent, and Impossible if one week is spent. At the GM's&nbsp;option, the difficulty can be modified for the animal's intelligence is higher or lower than average. Most wild animals can't be&nbsp;trained without considerable difficulty and reinforcement; wild animals should take four times as long to train. Outstanding Success&nbsp;allows the handler to train the animal in half the time, or teach one additional trick in the normal amount of time. Normal failure&nbsp;means the animal does not grasp the concept of the task; the handler may try another task roll at one difficulty level better in&nbsp;another week. Catastrophic Failure means the handler will never be able to teach the animal that particular trick; however, another&nbsp;character with this skill may try to teach the animal the same trick.

:The controlling attribute for Animal Training and Handling is Education.</p>

;Archaic Artillery
:This is treated just as Heavy Artillery skill, but it is used only for the old style black powder and cannonball artillery popular in the 19<sup>th</sup> century. Think American Civil War.


;Bribery
:The character with this skill has the experience with bribing petty and not-so-petty officials in order to circumvent regulations and laws. Minor officials may generally be bribed to ignore local laws and regulations on an Easy to Difficult roll,&nbsp;depending on the bribe given. If the first offer is refused, a second offer may be made, with double the value of goods or services,&nbsp;at the same difficulty level. More important officials will require more difficult rolls and higher amounts of bribes. What bribes will&nbsp;cause a positive reaction is highly subjective and varies with the official being bribed.

:Other skills may being modifiers to the difficulty level, most notably Persuasion and Carousing. Bribery is a Charisma-based skill.</p>

;Carousing
:This is the skill that social butterflies have. They are able to make friends and acquaintances easily, skillfully join conversations and make witty remarks, and generally blend into any social situations. A successful Easy: Carousing roll can turn&nbsp;persons encountered in a &quot;Friendly and Curious&quot; manner (see p. 167 of the </span><span class="font4" style="font-style:italic;">Twilight: 2000 Version 2.2</span><span class="font4"> rules) into trusted allies who&nbsp;will do favors. Average: Carousing will turn an &quot;Open to Contact&quot; encounter into &quot;Friendly and Curious;&quot; Difficult: Carousing will&nbsp;turn &quot;Neutral&quot; into &quot;Open to Contact,&quot; a Formidable check will turn &quot;Suspicious&quot; into &quot;Neutral,&quot;, etc. Characters with this skill may&nbsp;attempt greater encounter shifts; i.e., the character may attempt to turn &quot;Neutral&quot; into &quot;Friendly and Curious&quot; with a Formidable roll.&nbsp;In order to use this skill, the character must interact, and preferably, converse in the same language as the persons encountered.&nbsp;Adjustments may be made for bribery, but threats don't work in conjunction with this skill; in fact, they hinder it. If the character&nbsp;can speak only a language in the same group, increase the difficulty by one step; if they cannot speak the language or a related&nbsp;language at all, increase the difficulty by two steps. Carousing is a Charisma-based skill.


;Carpenter
:Basic items (simple furniture, simple woodwork, basic housing) may be done without plans by a carpenter with an Average: Carpentry check. Fancy furniture requires plans (Average: Carpentry) or may be done without plans (Difficult:&nbsp;Carpentry). More complicated items absolutely require plans and should be graded by the GM on difficulty; something like a&nbsp;catapult might require a Formidable: Carpentry check, while a crossbow would require a Difficult: Carpentry check. For most&nbsp;carpentry activities, at least basic tools are required; for some tasks, power tools may be required or speed the job considerably.&nbsp;The controlling attribute for Carpentry is Strength.


;Cartography
:While anyone may draw a simple route sketch, the character with Cartography skill may make detailed maps that can be followed by anyone and used to plan timetables and in precise land navigation. Most simple maps (such as a street&nbsp;with addresses and accurate sizing of houses) are Easy. An entire village may be drawn with an Average roll, towns may be drawn&nbsp;with a Difficult roll, cities with a Formidable roll, and major cities with an Impossible roll. (Alternatively, the task of large areas may&nbsp;be broken into smaller tasks, each with a lesser difficulty roll). Open areas may be drawn in a similar fashion, but the difficulty of&nbsp;the area to be mapped depends upon the size and the amount of landmarks. Obviously, a trackless desert or dense jungle will be&nbsp;Impossible (or even worse), while an open area with numerous hills, valleys, buildings, roads and glens will be much easier&nbsp;(perhaps Average-Easy). Remember, in warfare, accurate intelligence data is life.

:The controlling attribute for Cartography is Education.</p>

;Cryptography
:The character with this ability has the ability to devise and break codes. Simple codes can be made on an Easy: Cryptography roll, and broken on an Average roll; something like a CEOI allows a Difficult: Cryptography roll, with a&nbsp;Formidable toll to break. Other codes are correspondingly more difficult to make and break. Radio scrambler codes typically take&nbsp;a computer and a Formidable roll to break, while the hopset of a frequency-hopping radio requires at least an Impossible roll, is&nbsp;not worse. Cryptography is an Intelligence-based roll.


;Dance
:Dance has very few game applications by itself, though it may modify a variety of skills, including Carousing, Streetwise, Disguise, and possibly others. Two possible skill modifications are Unarmed Martial Arts and Armed Martial Arts; for&nbsp;every 5 levels of Dance skill, allow a DM of +1 per 5 points of the Dance skill score (modified by Agility, rounding down) to both of&nbsp;these skills. Dance is an Agility-based skill.


;Escape Skill
:This skill's controlling attribute is Agility. It allows a character to slip out of bonds and bindings. Some difficulty ratings of typical bindings are: string (Easy), cord or rope (Average), handcuffs, rawhide, or plastic quick-ties (Difficult), shackles&nbsp;(Formidable), and straitjackets (Impossible). Success with other types of binding materials may be extrapolated from this&nbsp;information. When using a combination of binding materials, add together the difficulty levels; thus, if the character is bound with&nbsp;handcuffs and a straitjacket, the difficulty should be something like Extremely Impossible (one-sixteenth normal chances). Escape&nbsp;skill does not grant the ability to pick locks, even on handcuffs and shackles; for that, you need Intrusion skill. Escape skill merely&nbsp;allows one to slip out of bonds by manipulation of joints and muscles, and, to a certain extent by loosening bonds such as knots.

:Time required to execute this skill is typically 3d6 phases per difficulty level. Chance for success may be increased by one level per extra 3d6 phases spent preparing for the escape attempt.</p>

;Genetics
:Used in conjunction with farming, this skill allows a one step favorable shift in the difficulty level of farming for every growing season of study. Used in conjunction with raising animals, it allows the same shift for items such as meat production&nbsp;on farmed animals or milk production. This skill may also be used for breeding purposes to help eliminate genetic diseases or to&nbsp;breed animals with certain desired characteristics, such as breeds of dogs. A scarier aspect of this skill would be eugenics,&nbsp;breeding humans with certain desired characteristics. Use of this skill takes years sometimes, and a lot of patience. Genetics is&nbsp;an Education-based skill.


;Ground Vehicle (Snowmobile)
:As it sounds, this is the skill required to operate a snowmobile. It is not the skill required to operate over-the-snow vehicles such as the BV-206 (</span><span class="font4" style="font-style:italic;">NATO Combat Vehicles Guide</span><span class="font4">); the skill required for vehicles like that is&nbsp;Ground Vehicle (Tracked). Ground Vehicle (Snowmobile) is otherwise treated the same as other Ground Vehicle skills.


;Jeweler
:A character with skill may make jewelry and cut gemstones. Simple lapidary and such requires an Easy: Jeweler check. Worked metal objects require a Difficult: Jeweler check. Engraving may be done with appropriate tools and the check is&nbsp;Average-Formidable (depending on the detail required). Gem cutting is Formidable: Jeweler, and requires special tools; it cannot&nbsp;be done without these tools. The character may increase the value of metal or gemstones by 10% for every 1 point by which the&nbsp;character beats the required skill roll. Outstanding success adds another 100% and creates a work of art, or halves the required&nbsp;time for the job. The controlling attribute for Jeweler skill is Agility.


;Jumping
:The controlling attribute for Jumping is Strength. The following can be used as general guidelines for the use of this skill: jump upwards from a standing start 75% of your height (Easy), jump upwards from a standing start your height (Average),&nbsp;jump upwards from a standing start 125% of your own height (Difficult), jump upwards from a standing start 135% your own height&nbsp;(Formidable), jump upwards from a standing start 150% your own height (Impossible). Add one level of difficulty if you're carrying&nbsp;25% of your maximum load, add two levels if you're carrying 50% of your maximum load, add three levels if you're carrying 75% of&nbsp;your maximum load, and add four levels if you're carrying 100% of your maximum load. Outstanding Success indicates a good&nbsp;landing (such as on your feet), or an extra 50% in height. Catastrophic Failure means that you fall on your butt.

:Also from a standing start: long jump twice your height (Easy), long jump 225% your height (Average), long jump 250% your height (Difficult), long jump 275% your height (Formidable), long jump 300% your height (Impossible). Modify for weight carried as&nbsp;per high jumps above. Landings are usually on the feet, but outstanding success means an extra 50% of the distance jumped.&nbsp;Catastrophic Failure could be truly catastrophic, if you were trying to jump a gap between buildings, for example.</p>
:From a running start: long jump 300% your own height (Easy), long jump 350% your own height (Average), long jump 400% your own height (Difficult), long jump 450% your own height (Formidable), long jump 500% your own height (Impossible). Add&nbsp;difficulty levels as above. Once again, Catastrophic Failure could be truly catastrophic, but Outstanding Success indicates an&nbsp;excellent landing or an extra 50% of distance jumped.</p>
:Standing or running: jump downward twice your own height without hurting yourself (Easy), jump downward 300% of your height without hurting yourself (Average), jump downward 400% your own height without hurting yourself (Difficult), jump downward&nbsp;500% your own height without hurting yourself (Formidable), jump downward 600% your own height without hurting yourself&nbsp;(Impossible). Modify for weight carried as above. Landings are normally in a tuck and roll, but Outstanding Success allows for a&nbsp;standing-up landing. Catastrophic Failure causes 1d6 points of damage per difficulty level of the jump to each leg and 1d2 damage&nbsp;per difficulty level applied to one other random body part. Normal failure causes 1d6-2 damage per difficulty level to each leg.</p>
:Jumps can be combined, at a total penalty of one difficulty level to the jump.</p>

;Long Distance Marching
:This is the skill of forced marching. A character with this skill may march for one extra period with an Easy: Long Distance Marching roll, two extra periods with an Average roll, and three extra periods with a Difficult roll. The&nbsp;character may also march the normal distance per day without fatigue on a Difficult roll. A character with this skill may carry his full&nbsp;weight allowance without a speed penalty on a Difficult roll. A character with this skill may attempt to march faster with this skill;&nbsp;+15% distance is done with an Easy roll, +25% distance is done with an Average roll, +35% distance is done with a Difficult roll,&nbsp;+50% distance is done with a Formidable roll, and +75% distance is done with an Impossible roll. Finally, the character may&nbsp;attempt to march with a greater than normal load, but the normal distance; +20% is an Easy roll, +40% is an Average roll, +60% is&nbsp;a Difficult roll, +80% is a Formidable roll, and +100% is an Impossible roll. Combinations of these are possible by adding together&nbsp;the difficulty rolls; i.e.; marching +15% distance with +20% load for one extra period would be a Difficult: Long Distance Marching&nbsp;task. The controlling Attribute for Long Distance Marching is Constitution.


;Mason
:With the appropriate stone working tools, the character with this skill may build items and structures out of stone, bricks, or concrete. Sculpture is also possible; this requires a Formidable: Mason roll. Brick or cinder block structures may be built&nbsp;using an Average: Mason roll. Structures may also be built from unworked stone; this usually requires a Difficult: Mason roll, but&nbsp;simple structures such as a low wall for cover will require only an Average: Mason roll. Concrete walks, floors, and driveways may&nbsp;be poured using the appropriate equipment and an Average: Mason roll. Repairs may be made to existing structures; Easy for 110% damage, Average for 11-20% damage, Difficult for 21-30% damage, Formidable for 31-40% damage, and Impossible for 4150% damage. (Structures more damaged than this must be razed and rebuilt from scratch.) Even a dam may be built, using a&nbsp;combination of this skill and Civil Engineer; this should be a Formidable: Mason roll under most circumstances. Note that in most&nbsp;cases, the Mason will not be doing all the actual work himself; he will be supervising other (not necessarily Mason-skilled)&nbsp;individuals. Mason is a Strength-based skill.


;Mortar
:This skill is generally used in the same manner as Heavy Artillery, but is used with Mortars. (Mortar gunnery and grenade launcher gunnery are sufficiently different that the skills cannot generally be used interchangeably.) Most mortar gunnery&nbsp;is Formidable: Mortar on the first shot, and this can be improved with corrections in the same manner as artillery fire. Direct lay&nbsp;(where the gunner can see the target) is Difficult. Blind fire (where the crew knows the location of the enemy on the map, but&nbsp;cannot see the target and has no forward observer) is Impossible, and in any case, the crew will not know the results of their fire&nbsp;and must guess when to stop. Fire against a pre-surveyed point (a point on the map well known, marked, and surveyed for&nbsp;accuracy, with pre-determined coordinates) is one level easier. If the mortar is capable of direct fire (such as some French or&nbsp;Russian mortars), the fire is resolved using Grenade Launcher skill.


;Music
:This skill is the ability to play some sort of musical instrument. Aside from entertainment value, this skill can smooth over encounters and perhaps provide the character some employment. At the GM's discretion, it may modify Act/Bluff, Carousing,&nbsp;Disguise, Streetwise, Persuasion, Willpower, or Recruiting. Music is an Agility-based skill.


;NBC Specialist
:This skill brings knowledge of how to survive on a contaminated battlefield. The character with this skill has knowledge of decontamination procedures, countermeasures against chemical, biological, and nuclear exposure, and how to&nbsp;properly read Geiger counters and chemical sniffers. This skill is required for proper operation of the Steam Decontamination&nbsp;Trailer and the NBC Decontamination Trailer. A character with the NBC Specialist skill can also maintain equipment used for water&nbsp;decontamination and desalination. He may also maintain NBC protection gear such as protective masks and clothing, and&nbsp;determine whether they are still safe to use. He may determine whether or not a given area is safe to camp in an NBC context.&nbsp;Finally, much like the Biology skill, the character with this skill may determine whether plants, animals, and foodstuffs are safe to&nbsp;eat and drink after examining them. NBC Specialist is an Education-based skill.


;Painting
:This is another skill that may provide the character with employment or an item of some salable value. People that can paint can usually draw, and this may aid in some encounters. A very possible game use is to compose effective camouflage&nbsp;patterns on equipment and vehicles; a vehicle, building, or piece of equipment worked on by a painter with access to the proper&nbsp;paint colors is one level more difficult to spot on a Difficult roll, two levels more difficult to spot on a Formidable roll, and three&nbsp;levels more difficult on an Impossible or Outstanding Success roll. (Remember that camouflage patterns must change with the&nbsp;terrain, and eventually wear off and fade.) Catastrophic Failure at the camouflage task makes the vehicle or equipment one level&nbsp;easier to spot, while Normal Failure doesn't help or hinder the vehicle or equipment. Most difficulty rolls with this skill will be&nbsp;Average or Difficult. Painting is an Agility-based skill.


;Physics
:The primary uses of Physics in game terms are to determine how far radioactive material is away using readings from a Geiger counter, and to determine the degree of danger in the present and the future from radioactive materials. Most&nbsp;determinations will be Average tasks. A character with Physics and a successful roll will be able to take a reading and determine&nbsp;how many rads a character will take in a given area, before exposure. Another possible use is to examine a nuclear bomb and to&nbsp;determine the yield of the device. Physics is an Education-based skill.


;Pickpocket
:This is the ability to take something off someone else's person without the victim's noticing that the object is being removed. Most items (stereotypically coins and wallets) may be removed by an Average opposed roll of the characters&nbsp;Pickpocket skill and the victim's Observation skill. Pistols and knives may be removed from a closed holster or sheath by a Difficult&nbsp;roll. If the holster has a safety loop, the roll is Formidable. If the victim is distracted, decrease difficulty by one step. Items may&nbsp;be taken out of closed backpacks or equipment pouches with a Formidable roll. If the item is tied to the victim (such as with a&nbsp;&quot;dummy cord&quot; tied from the item to a pistol belt), the roll should be Impossible. Pickpocket is an Agility-based skill.


;Pilot (Fabric Wing)
:This is the skill required to fly hang gliders and ultralights. It is otherwise treated as normal Pilot (Fixed Wing) skill.


;Pilot (Glider)
:This skill is required to fly sailplanes and gliders, even heavy ones such as those used to deliver troops during World War 2. If the pilot has this skill, he may also use to attempt to safely land deadstick aircraft (those on which all engines have&nbsp;failed) using his Pilot (Glider) skill. It is otherwise treated as normal Pilot (Fixed Wing) skill. Hang gliders cannot be flown with this&nbsp;skill; that requires Pilot (Fabric Wing) skill.


;Pilot (Jet)
:This is the skill required to fly high-performance jet aircraft, such as fighters and attack aircraft. It is otherwise treated as normal Pilot (Fixed Wing) skill.


;Pilot (Multiengine)
:Normal sized aircraft, even those with multiple engines, are flown with the appropriate Pilot (Fixed Wing), Pilot (Jet), or Pilot (Rotary Wing). Pilot (Multiengine) is required to fly heavy, multiengine aircraft, such as airliners and&nbsp;cargo aircraft such as the C-130 or C-141. It is otherwise the same as normal Pilot skill.


;Pilot (Spacecraft)
:As it sounds, this skill is the one required to fly spacecraft. This skill, Pilot (Jet), and Pilot (Multiengine) are required to fly the Space Shuttle within the atmosphere. (Average the three skills together when determining skill level for&nbsp;purposes of flying the Space Shuttle or Russia's Buran).


;Psychology
:This skill allows a character to judge the motives of another character. It can be used, for example, to determine the truth or falsehood of statements the character makes. It can also modify other skills, such as Disguise, Act/Bluff,&nbsp;Instruction, Interrogation, Persuasion, Streetwise, and Leadership. If the GM uses it, it may also be used to treat Post-Traumatic&nbsp;Stress Disorder and other mental illnesses. The controlling attribute for Psychology is Intelligence.


;Reactor Operations
:The character with this skill is able to run, repair, fuel, and service a nuclear reactor, or supervise others to do these tasks. Many specialized tools and materials are necessary for these tasks. Most difficulty rolls for these tasks&nbsp;will be Average to Formidable. The controlling attribute is Education.


;Recruiting
:The character with this skill is able to determine the potential of candidates for tasks, and then convince them that service under the command of the character or his associates is the best option. Recruiting novice troops takes an Easy:&nbsp;Recruiting roll. Recruiting Experienced troops requires an Average roll. Recruiting Veteran troops takes a Formidable roll, and&nbsp;recruiting Elite troops requires an Impossible roll. These difficulty levels assume recruiting from the average populace; the GM may&nbsp;adjust down or upward depending on what information he has about the quality of individuals the area has. The player may recruit&nbsp;10% of the available labor pool for every two points by which he beats the required skill roll. (Rolling exactly what you need will&nbsp;recruit 10% of the labor pool in that category; at least one individual will be recruited per successful roll.) GM may adjust the&nbsp;difficulty of the rolls based on bribes, promises (if believed), etc. Other circumstances, such as whether the recruited individual has&nbsp;to leave home or not, should also be considered. Under most circumstances, the recruiter will have to be able to speak the&nbsp;language of the labor pool; if he cannot, adjust the difficulty by one step. Recruiting is not always for military purposes. Recruiting&nbsp;is a Charisma-based skill.


;Research
:This is the skill that scientists and intelligence analysts have. It allows the character to see patterns in things that the average person cannot, or to see how seemingly disparate facts fit together into a logical whole. When used to find out&nbsp;information, the GM should devise a difficulty level based on the information looked for and the size of the community where the&nbsp;character is looking, as well as the availability of books and other such information.

:When this skill is used by to create battlefield intelligence, the GM should base the difficulty on how much information about enemy movements and capabilities is available. Success allows the character to accurately predict what the enemy is going to do&nbsp;within the next few hours, and the information can then be used to devise countermeasures. This skill is not the same as Tactics;&nbsp;success with Research requires much more time, and produces more lasting results.</p>
:The controlling attribute for Research is Education.</p>

;Sculpture
:Though this skill has very little game use, it may provide the character with employment or a salable object. A possible use is whittling or carving a weapon, whether real (as in some kind of blade or arrowhead), or fake to fool someone (as&nbsp;John Dillinger did to break out of prison). Difficulty level depends on the complexity of the task. The controlling attribute is&nbsp;Strength.


;Ship Helm Operations
:This is the ability to run or act as a crewman of a large ship, such as a Naval Vessel. Most tasks will not require a skill roll, but operation of the ship in difficult circumstances, such as combat movement or during a storm, will&nbsp;require a roll at a difficulty level determined by the GM. This is an Intelligence-based skill.


;Sniping
:Sniping is a Strength-based skill. It manifests itself as a modifier to the base range of firearms. To determine the modifier, take the modified Sniping score (Sniping skill modified by Strength), subtract 7, and divide by 2. This is the multiplier that&nbsp;is used to modify the base range of the weapon.

:For example: John Thomas has a sniping score of 5 and a Strength of 7. His Sniping score, modified by Strength, is 12. Subtracting 7, we get 5. Dividing by 2, we get 2.5. The base range of eligible weapons is multiplied by 2.5 to determine his new&nbsp;base range with eligible weapons. The minimum multiplier is x1.1. Base range is modified by the scope before multiplying.</p>
:The following weapons are eligible for Sniping score modifications: automatic pistols, revolvers, special purpose pistols, all rifles, crossbows, and automatic rifles. The Sniping range applies to a maximum or three non-automatic shots per phase. The&nbsp;weapon must have some sort of sight, such as laser sights or telescopic sights. One phase must be spent aiming before taking the&nbsp;Sniping-modified shots.</p>

;Song
:Depending on skill level, the character has some sort of singing voice, whether decent or truly great. Aside from entertainment value, this skill may, at the GM's discretion, modify Act/Bluff, Carousing, Disguise, Persuasion, Recruiting, Streetwise,&nbsp;or Willpower. It may also provide the character with some employment. Song is a Charisma-based skill.


;Stalking
:Stalking is the urban equivalent of Tracking. It involves following a quarry that typically does not want to be followed. But instead of looking for prints and droppings, the stalker is skilled at judging the quarry's path by watching for&nbsp;unconscious signs from bystanders, gauging distances to alleys, peering into shadows, and suchlike. Characters adept at Tracking&nbsp;may substitute that skill for Stalking at one difficulty level higher than usual. The opposite is also true. Stalking is an Intelligencebased skill.


;Streetwise
:This skill simulates street smarts and some common sense. Streetwise is a general knowledge of how to survive in the roughest parts of an urban environment. It includes such things as knowing how to project an image that engenders respect&nbsp;among the locals, and knowing where to go to find what the character needs. Black markets may be found with an Average:&nbsp;Streetwise roll. Casing an urban location is a Difficult (Streetwise + Observation/2) roll. Facing down a street tough is a Difficult:&nbsp;Streetwise roll (modified up or down for the relative size and Strength of the two involved, and how well-armed they are). Facing&nbsp;down a gang is Formidable, modified as per facing down an individual, and further modified for the size of the groups involved.&nbsp;Obtaining false papers or otherwise finding a forger is a difficult task. The controlling attribute for Streetwise is Charisma.


;Submarine Helm Operations
:This is the same as Ship Helm Operations, but applies to the three-dimensional world of underwater combat.


;Tactics
:This is the talent of staying a step or two ahead of your enemy, and devising plans to take advantage of this. This skill deals with small unit tactics, up to about 1000 men, five or 6 warships, or about a squadron of aircraft. Because tactical skill is&nbsp;an intangible, the Tactics skill is left open to GM interpretation, but the skill should allow the character to plan highly-efficient&nbsp;ambushes, discern enemy movements and plans a few minutes ahead (or 1-6 turns ahead for Last Battle games), or help to&nbsp;discover hidden movement. The GM should give the player some hints on what to do in such cases, or a little help in devising&nbsp;defenses. Encourage the player to read books on combat tactics. Tactics is an Intelligence-based skill.


;Veterinarian
:This skill may basically be treated the same as Medical skill, but for animals. The veterinarian may attempt to use his skill to treat humans, but at two difficulty levels higher. Veterinarian is also an Education-based skill.


;Willpower
:This is the ability to keep going when all hope seems lost. A character may ignore the effects of a &quot;Scratch&quot; level wound on an Easy: Willpower roll. &quot;Slight&quot; wound effect may be treated as a &quot;Scratch&quot; with an Average roll. &quot;Serious&quot; wounds&nbsp;may be treated as &quot;Slight&quot; wounds for detrimental effects on a Formidable Roll. Critical wounds (except to the head) may be&nbsp;treated as &quot;Serious&quot; wounds for ill effects on an Impossible roll.

:Another use of Willpower is to decrease the difficulty of feats or other skills that are based on Strength or Constitution. A successful Formidable: Willpower roll decreases the difficulty of feats requiring those skills by one level. An Impossible Willpower&nbsp;skill roll decreases the difficulty by two levels.</p>
:Willpower is an Intelligence-based skill.</p>

!!GeekUp Bit Set: Twilight Struggle
[img[GeekUp Bit Set: Twilight Struggle.image]]
;Source
:https://boardgamegeekstore.com/collections/accessories-1/products/geekup-bit-set-twilight-struggle


Twilight Struggle is masterpiece of both history and two-player gaming, and well deserving of its spot in the BGG Top 10 Games for well over a decade.  Now this classic is getting an upgrade worthy of its accolades, with a GeekUp set to replace all 260 of the punchboard tokens from the most recent 7th printing.

The pieces are made of a hard plastic, similar to Bakelite, and the graphics are applied via a 4-color heat transfer process, which fuses the images to the plastic in a way that makes them very scratch resistant, meaning they should last a lifetime.

This GeekUp set contains all 260 of the tokens on the two punchboards from the 7th printing edition (i.e. NOT the 2015 Kickstarter edition), all 15x15mm squares with 4mm thickness:

*114 US Influence/Command tokens (values 1-8, US Space Race, and US Military Ops)
*117 USSR Influence/Command tokens (value 1-8, USSR Space Race, and USSR Military Ops)
*6 Yellow Tiles:
**1 DEFON status
**1 Turn marker
**1 VP Marker
**3 Nuclear Symbol tokens)
*3 White Tiles: 
**Action Round marker
**1 NASA 2nd card marker
**1 Soviet Space Program 2nd card maker
*20 Card Reminder Markers

{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}


!Fleet Commander
The Tyranid player may opt to include the direct influence of the Hive Mind in lieu of having a Fleet Commander. These take the form of Hive Mind Influence re-rolls and Hive Mind Imperatives. Hive Mind Influence re-rolls work in the same way as normal Fleet Commander re-rolls. Hive Mind Imperatives cause a Command check or Leadership test to be passed automatically. The decision to use a Hive Mind Imperative must be taken before the dice are rolled.

|Hive Mind Influence re-roll | 30 pts each |

A maximum of one Hive Mind Influence re-roll can be purchased per hive ship in the fleet.

|Hive Mind Imperative | 40 pts each |

A maximum of one Hive Mind Imperative can be purchased per two hive ships in the fleet, though a single hive mind imperative may be purchased as long as the fleet contains at least one hive ship.

!Hive Ships

Each hive ship allows the Tyranid player to purchase 6-12 escort ships and 0-2 Capital Ships.

|Hive ship (Ld 8) | 200	pts |
|Increase to Ld 9 | +40	pts |

!!Weapons. 

A hive ship must be armed with Weapons chosen from the following list:

One Prow Weapon:

|Pyro-acid battery | +30 pts |
|Feeder tentacle & massive claws  | +15 pts |
|Bio-plasma spines | + 20 pts |
|Torpedoes | + 25 pts |

One Thorax Weapon:

|Pyro-acid battery | +30 pts |
|Bio-plasma discharge  | +20 pts |
|Launch bay:  | +20 pts |

Up to Three Port/Starboard Weapons:

|Pyro-acid battery | + 15 pts |
|Bio-plasma discharge  | +20 pts |
|Launch bay:  | +20 pts |

!Capital Ships

You may include up to 2 Capital Ships for each hive ship in the fleet.

|[[Tyranid cruiser ]] | 80	pts |

!!Weapons. 

A Tyranid cruiser must be armed with Weapons chosen from the following list: 

One Prow Weapon:

|Feeder tentacle  | +10	pts |
|Massive claws  | +5 pts |
|Torpedoes  | + 10 pts |

One Thorax Weapon:

|Feeder tentacle  | +10	pts |
|Massive claws  | +5 pts |
|Torpedoes  | +	10	pts |

Up to Two Port/Starboard Weapons:

|Pyro-acid battery  | +	15	pts |
|Bio-plasma discharge | + 20	pts |

!Escorts

You may include between 6 and 12 escort class ships for each hive ship. If no hive ships are chosen, only Kraken and Vanguard drone ships may be included in the fleet.

|[[Vanguard drone ship  ]] | 20	pts |

!!Weapons. 

A Vanguard drone ship must be armed with one weapon chosen from the following list:

|Pyro-acid battery | +5	pts |
|Feeder tentacles  | +5	pts |
|[[Escort Drone  ]] | 10	pts |

!!Weapons

A Tyranid escort drone must	be armed with one weapon chosen from the following list:

|Pyro-acid battery | +10	pts |
|Feeder tentacles  | +5	pts |
|Bio-plasma discharge  | +5	pts |
|[[Kraken  ]] | 25 pts |

!!Weapons

A Kraken must be armed with one weapon chosen from the following list:

|Pyro-acid battery | +15	pts |
|Feeder tentacles  | +5	pts |
|Massive claws  | +10	pts |
|Torpedoes | +15	pts |

!Squadrons

Tyranids do not follow the normal squadron rules when forming up the fleet. Tyranid Escorts come as Squadrons of 1 to 12 vessels, while all other types are individuals and may not deploy in Squadrons.

!Ordnance

Up to 10% of the fleet’s points allowance may be spent on Ordnance markers as long as at least one hive ship is chosen.

|Str 4 Boarding Torpedo markers | 12 pts each |
|Assault boat markers | 8	pts each |
|Fighter markers | 7	pts each |

Ordnance may be formed up into waves which are treated as Squadrons for the purposes of deployment. In a campaign, Ordnance does not form, a permanent part of the fleet and is ‘used up' in a battle.

!Weapons

Most Tyranid vessels are permitted to choose their Weapons from, a number of choices by paying the additional points cost indicated. This should all be fairly self-explanatory, but one thing to remember is that when buying ‘port/starboard Weapons' the points cost indicated provides you with one port weapon and one starboard weapon (of the same type) for the points cost indicated. So, if you chose port/starboard launch bays for a hive ship, you should remember to note down that the vessel has port launch bays and starboard launch bays. Each port/starboard weapon uses the profile given (ie, don't ‘split' their firepower).
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{bfg_Ship Template}}
{{Imperial Tyrant-class Cruiser}}
{{Imperial Universe-class Mass Conveyor}}
The first steps to changing the appearance of TiddlyWiki are to choose and apply one of the available themes, or to modify the [[colour palette|ColourPalettes]].

In addition, custom [[CSS stylesheets|http://www.w3schools.com/css]] can be defined by tagging a tiddler `$:/tags/Stylesheet`. Try creating a custom stylesheet now with the following content in order to change the page background colour to red:

```
html body.tc-body {
	background: red;
}
```

! Overriding Theme Settings

Custom stylesheets are applied independently from theme stylesheets. Therefore, it is often necessary for the css rules in your custom stylesheet to be more specific than those of the theme you want to override. For example, `html body.tc-body` is more specific than `body.tc-body`.

!!! Ordering of stylesheets

Ordering of stylesheets is controlled in the main stylesheet $:/core/ui/PageStylesheet by the following list filter:

```
<$list filter="[all[shadows+tiddlers]tag[$:/tags/Stylesheet]]"/>
```

With help of a list-after field in a custom stylesheet, the order of the stylesheets can be rearranged to ease overwriting theme styles.

<<<
To check the order of all stylesheets in use, enter the following filter in the filter tab of Advanced search:

```
[all[shadows+tiddlers]tag[$:/tags/Stylesheet]]
```
<<<

! Stylesheet Types

Usually it is best to use the type `text/css` for stylesheets. This treats them as plain stylesheets, and ensures that TiddlyWiki doesn't apply any wiki processing to them.

If you wish to use macros and transclusions in your stylesheets you should instead use the default WikiText type `text/vnd.tiddlywiki`. This allows full WikiText processing to be performed. Here is an example:

```
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html

body.tc-body pre {
	<<box-shadow "inset 0 1px 0 #fff">>
}
```

The `\rules` pragma at the top of the tiddler restricts the WikiText to just allow macros and transclusion. This avoids mistakenly triggering unwanted WikiText processing.

A stylesheet tiddler is processed such that it is first wikified and then the text portion of the ouput is extracted to apply as the CSS. Any HTML tags you will use in your stylesheet are thus ignored. For example, HTML elements generated by the RevealWidget will not affect the output. As in the following example, you can wrap CSS rules in `<pre>` tags to display them as a codeblock without affecting processing, including handling the inner macro.

```
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline html

<pre>body.tc-body pre {
	<<box-shadow "inset 0 1px 0 #fff">>
}
</pre>
```

!! Stylesheet Macros

The ~TiddlyWiki core provides several [[global macros that are helpful in constructing stylesheets|Stylesheet Macros]].
!![img[Air Defense Gun Battalion.French]] [[V/402nd AA]]
<<<
;Battalion Headquarters
://Headquarters & Laffly//
;2x Company
://Laffly// ^^Command^^
:2x //75mm CAM40//
{{Imperial Vagabond-class Merchant Trader}}
@@.fourcolumns
<$list filter="[tag[Vallejo]sort[title]]">
<$transclude field="text" mode="block"/>
</$list>

@@
<td bgcolor=842C0E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Rust''<br>&emsp;Vallejo<br>&emsp;70.301
<td bgcolor=301B17 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Rust''<br>&emsp;Vallejo<br>&emsp;70.302
<td bgcolor=A25D38 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellowish Rust''<br>&emsp;Vallejo<br>&emsp;70.303
<td bgcolor=574636 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Track Primer''<br>&emsp;Vallejo<br>&emsp;70.304
<td bgcolor=707374 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Rubber''<br>&emsp;Vallejo<br>&emsp;70.305
<td bgcolor=4D5151 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Rubber''<br>&emsp;Vallejo<br>&emsp;70.306
<td bgcolor=430600 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Red Tail Light''<br>&emsp;Vallejo<br>&emsp;70.307
<td bgcolor=00311D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Green Tail Light''<br>&emsp;Vallejo<br>&emsp;70.308
<td bgcolor=001F33 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Periscopes''<br>&emsp;Vallejo<br>&emsp;70.309
<td bgcolor=B09C78 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Old Wood''<br>&emsp;Vallejo<br>&emsp;70.310
<td bgcolor=885D3B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''New Wood''<br>&emsp;Vallejo<br>&emsp;70.311
<td bgcolor=532F22 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Leather Belt''<br>&emsp;Vallejo<br>&emsp;70.312
<td bgcolor=EDE8DE style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stencil''<br>&emsp;Vallejo<br>&emsp;70.313
<td bgcolor=63562E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Canvas''<br>&emsp;Vallejo<br>&emsp;70.314
<td bgcolor=A49B7A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Mud''<br>&emsp;Vallejo<br>&emsp;70.315
<td bgcolor=5D432A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Mud''<br>&emsp;Vallejo<br>&emsp;70.316
<td bgcolor=5D432A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.317
<td bgcolor=493704 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''US Army Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.318
<td bgcolor=0E5A40 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''USMC Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.319
<td bgcolor=63562E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.320
<td bgcolor=E6BB7E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Tank Crew Highl.''<br>&emsp;Vallejo<br>&emsp;70.321
<td bgcolor=B09C78 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''US Army Tank Crew Highl.''<br>&emsp;Vallejo<br>&emsp;70.322
<td bgcolor=95AA9D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''USMC Tank Crew Highl.''<br>&emsp;Vallejo<br>&emsp;70.323
<td bgcolor=84736A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Tank Crew Highl.''<br>&emsp;Vallejo<br>&emsp;70.324
<td bgcolor=445A6A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Tank Crew I''<br>&emsp;Vallejo<br>&emsp;70.325
<td bgcolor=574636 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Tank Crew II''<br>&emsp;Vallejo<br>&emsp;70.326
<td bgcolor=4C480A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Italian Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.327
<td bgcolor=56400E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Japan Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.328
<td bgcolor=769A97 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rus. Tank Crew Highl. I''<br>&emsp;Vallejo<br>&emsp;70.329
<td bgcolor=667137 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rus. Tank Crew Highl. II''<br>&emsp;Vallejo<br>&emsp;70.330
<td bgcolor=95BEA9 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Italian Tank Crew Highl.''<br>&emsp;Vallejo<br>&emsp;70.331
<td bgcolor=A18974 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Japan Tank Crew Highl.''<br>&emsp;Vallejo<br>&emsp;70.332
<td bgcolor=1F1D07 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Germ. Tank Crew (Black)''<br>&emsp;Vallejo<br>&emsp;70.333
<td bgcolor=03412C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Tank Crew I''<br>&emsp;Vallejo<br>&emsp;70.334
<td bgcolor=47391A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Tank Crew II''<br>&emsp;Vallejo<br>&emsp;70.335
<td bgcolor=6E6C56 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Afrikakorps Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.336
<td bgcolor=3E1F12 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ger.Tank Crew Highl.(Black)''<br>&emsp;Vallejo<br>&emsp;70.337
<td bgcolor=4C726D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Germ. Tank Crew Highl. I''<br>&emsp;Vallejo<br>&emsp;70.338
<td bgcolor=885D3B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Germ. Tank Crew Highl. II''<br>&emsp;Vallejo<br>&emsp;70.339
<td bgcolor=B09C78 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Afrikakorps Highlights''<br>&emsp;Vallejo<br>&emsp;70.340
<td bgcolor=A14F1A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flesh Base''<br>&emsp;Vallejo<br>&emsp;70.341
<td bgcolor=FDCDA2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flesh Highlights''<br>&emsp;Vallejo<br>&emsp;70.342
<td bgcolor=580702 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flesh Shadows''<br>&emsp;Vallejo<br>&emsp;70.343
<td bgcolor=EDE8DE style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German White Tank Crew''<br>&emsp;Vallejo<br>&emsp;70.344
<td bgcolor=93958D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Splinter Camouflage Base''<br>&emsp;Vallejo<br>&emsp;70.345
<td bgcolor=006640 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Splinter Blotches I''<br>&emsp;Vallejo<br>&emsp;70.346
<td bgcolor=3F2321 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Splinter Blotches II''<br>&emsp;Vallejo<br>&emsp;70.347
<td bgcolor=42654A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Splinter Strips''<br>&emsp;Vallejo<br>&emsp;70.348
<td bgcolor=008250 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow Fluo''<br>&emsp;Vallejo<br>&emsp;70.730
<td bgcolor=F06623 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Orange Fluo''<br>&emsp;Vallejo<br>&emsp;70.733
<td bgcolor=EB4C9B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Magenta Fluo''<br>&emsp;Vallejo<br>&emsp;70.735
<td bgcolor=1173B8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue Fluo''<br>&emsp;Vallejo<br>&emsp;70.736
<td bgcolor=99CD67 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Green Fluo''<br>&emsp;Vallejo<br>&emsp;70.737
<td bgcolor=57443D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Camouflage SS Middle Brown''<br>&emsp;Vallejo<br>&emsp;70.740
<td bgcolor=002418 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Camouflage SS Dark Black Green''<br>&emsp;Vallejo<br>&emsp;70.741
<td bgcolor=304C5F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gunmetal Blue''<br>&emsp;Vallejo<br>&emsp;70.800
<td bgcolor=8F6C36 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brass''<br>&emsp;Vallejo<br>&emsp;70.801
<td bgcolor=BE446C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sunset Red''<br>&emsp;Vallejo<br>&emsp;70.802
<td bgcolor=AF8188 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brown Rose''<br>&emsp;Vallejo<br>&emsp;70.803
<td bgcolor=B48370 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Beige Red''<br>&emsp;Vallejo<br>&emsp;70.804
<td bgcolor=CB8277 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Orange''<br>&emsp;Vallejo<br>&emsp;70.805
<td bgcolor=BFB87D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Yellow''<br>&emsp;Vallejo<br>&emsp;70.806
<td bgcolor=4E5172 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Oxford Blue''<br>&emsp;Vallejo<br>&emsp;70.807
<td bgcolor=1AA0A3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue Green''<br>&emsp;Vallejo<br>&emsp;70.808
<td bgcolor=316297 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Royal Blue''<br>&emsp;Vallejo<br>&emsp;70.809
<td bgcolor=534263 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Royal Purple''<br>&emsp;Vallejo<br>&emsp;70.810
<td bgcolor=6E6AB0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue Violet''<br>&emsp;Vallejo<br>&emsp;70.811
<td bgcolor=682441 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Violet Red''<br>&emsp;Vallejo<br>&emsp;70.812
<td bgcolor=5E3F3F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burnt Red''<br>&emsp;Vallejo<br>&emsp;70.814
<td bgcolor=F0B298 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Basic Skin Tone''<br>&emsp;Vallejo<br>&emsp;70.815
<td bgcolor=4D596A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Luftwaffe Uniform WWII''<br>&emsp;Vallejo<br>&emsp;70.816
<td bgcolor=BB464B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Scarlet''<br>&emsp;Vallejo<br>&emsp;70.817
<td bgcolor=875745 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Red Leather''<br>&emsp;Vallejo<br>&emsp;70.818
<td bgcolor=B6997D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Iraqui Sand''<br>&emsp;Vallejo<br>&emsp;70.819
<td bgcolor=E6E6D8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Offwhite''<br>&emsp;Vallejo<br>&emsp;70.820
<td bgcolor=888373 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Cam. Beige WWII''<br>&emsp;Vallejo<br>&emsp;70.821
<td bgcolor=444142 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Cam. Brown Black''<br>&emsp;Vallejo<br>&emsp;70.822
<td bgcolor=434F47 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Luftwaffe Cam. Green''<br>&emsp;Vallejo<br>&emsp;70.823
<td bgcolor=997951 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ger. Cam. Orange Ochre''<br>&emsp;Vallejo<br>&emsp;70.824
<td bgcolor=77655B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Cam. Pale Brown''<br>&emsp;Vallejo<br>&emsp;70.825
<td bgcolor=5B4F42 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Cam. Med. Brown''<br>&emsp;Vallejo<br>&emsp;70.826
<td bgcolor=86924E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lime Green''<br>&emsp;Vallejo<br>&emsp;70.827
<td bgcolor=BA5843 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Amaranth Red''<br>&emsp;Vallejo<br>&emsp;70.829
<td bgcolor=5B5D59 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Fieldgrey WWII''<br>&emsp;Vallejo<br>&emsp;70.830
<td bgcolor=D08F40 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tan Glaze''<br>&emsp;Vallejo<br>&emsp;70.831
<td bgcolor=A1BCB3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Verdigris Glaze''<br>&emsp;Vallejo<br>&emsp;70.832
<td bgcolor=5A6F52 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Cam. Bright Green''<br>&emsp;Vallejo<br>&emsp;70.833
<td bgcolor=F0A89B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Salmon Rose''<br>&emsp;Vallejo<br>&emsp;70.835
<td bgcolor=5F6974 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''London Grey''<br>&emsp;Vallejo<br>&emsp;70.836
<td bgcolor=F3D1AD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pale Sand''<br>&emsp;Vallejo<br>&emsp;70.837
<td bgcolor=108C68 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Emerald''<br>&emsp;Vallejo<br>&emsp;70.838
<td bgcolor=315DA7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ultramarine''<br>&emsp;Vallejo<br>&emsp;70.839
<td bgcolor=1D94A5 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Turquoise''<br>&emsp;Vallejo<br>&emsp;70.840
<td bgcolor=1F97C7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Andrea Blue''<br>&emsp;Vallejo<br>&emsp;70.841
<td bgcolor=EFF0F0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gloss White''<br>&emsp;Vallejo<br>&emsp;70.842
<td bgcolor=A0765D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cork Brown''<br>&emsp;Vallejo<br>&emsp;70.843
<td bgcolor=2DB0DF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Sky Blue''<br>&emsp;Vallejo<br>&emsp;70.844
<td bgcolor=E9A976 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sunny Skin Tone''<br>&emsp;Vallejo<br>&emsp;70.845
<td bgcolor=6C524D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Mahogany Brown''<br>&emsp;Vallejo<br>&emsp;70.846
<td bgcolor=CAAC83 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Sand''<br>&emsp;Vallejo<br>&emsp;70.847
<td bgcolor=296E37 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Medium Olive''<br>&emsp;Vallejo<br>&emsp;70.850
<td bgcolor=F26633 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Orange''<br>&emsp;Vallejo<br>&emsp;70.851
<td bgcolor=EFF0F4 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''White Glaze''<br>&emsp;Vallejo<br>&emsp;70.853
<td bgcolor=39312A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brown Glaze''<br>&emsp;Vallejo<br>&emsp;70.854
<td bgcolor=272624 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Black Glaze''<br>&emsp;Vallejo<br>&emsp;70.855
<td bgcolor=A77433 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ochre Brown''<br>&emsp;Vallejo<br>&emsp;70.856
<td bgcolor=7A7F4E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Golden Olive''<br>&emsp;Vallejo<br>&emsp;70.857
<td bgcolor=F4D390 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ice Yellow''<br>&emsp;Vallejo<br>&emsp;70.858
<td bgcolor=4B3737 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Black Red''<br>&emsp;Vallejo<br>&emsp;70.859
<td bgcolor=B38256 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Medium Fleshtone''<br>&emsp;Vallejo<br>&emsp;70.860
<td bgcolor=09080A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Glossy Black''<br>&emsp;Vallejo<br>&emsp;70.861
<td bgcolor=42494D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Black Grey''<br>&emsp;Vallejo<br>&emsp;70.862
<td bgcolor=5F6563 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gunmetal Grey''<br>&emsp;Vallejo<br>&emsp;70.863
<td bgcolor=818584 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Natural Steel''<br>&emsp;Vallejo<br>&emsp;70.864
<td bgcolor=6E7177 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Oily Steel''<br>&emsp;Vallejo<br>&emsp;70.865
<td bgcolor=555A60 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Grey Green''<br>&emsp;Vallejo<br>&emsp;70.866
<td bgcolor=44514B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Bluegrey''<br>&emsp;Vallejo<br>&emsp;70.867
<td bgcolor=505864 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Seagreen''<br>&emsp;Vallejo<br>&emsp;70.868
<td bgcolor=616871 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Basalt Grey''<br>&emsp;Vallejo<br>&emsp;70.869
<td bgcolor=7C8288 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Medium Sea Grey''<br>&emsp;Vallejo<br>&emsp;70.870
<td bgcolor=564E48 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Leather Brown''<br>&emsp;Vallejo<br>&emsp;70.871
<td bgcolor=504A41 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Chocolate Brown''<br>&emsp;Vallejo<br>&emsp;70.872
<td bgcolor=746352 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''US Field Drab''<br>&emsp;Vallejo<br>&emsp;70.873
<td bgcolor=88715E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tan Earth''<br>&emsp;Vallejo<br>&emsp;70.874
<td bgcolor=8A7563 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Beige Brown''<br>&emsp;Vallejo<br>&emsp;70.875
<td bgcolor=977563 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brown Sand''<br>&emsp;Vallejo<br>&emsp;70.876
<td bgcolor=AE824D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Goldbrown''<br>&emsp;Vallejo<br>&emsp;70.877
<td bgcolor=938151 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Old Gold''<br>&emsp;Vallejo<br>&emsp;70.878
<td bgcolor=7D6949 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Green Brown''<br>&emsp;Vallejo<br>&emsp;70.879
<td bgcolor=7D6A4E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Khaki Grey''<br>&emsp;Vallejo<br>&emsp;70.880
<td bgcolor=6F6A48 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow Green''<br>&emsp;Vallejo<br>&emsp;70.881
<td bgcolor=8B7B55 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Middlestone''<br>&emsp;Vallejo<br>&emsp;70.882
<td bgcolor=C0BEB6 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Silvergrey''<br>&emsp;Vallejo<br>&emsp;70.883
<td bgcolor=989486 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stone Grey''<br>&emsp;Vallejo<br>&emsp;70.884
<td bgcolor=99A291 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pastel Green''<br>&emsp;Vallejo<br>&emsp;70.885
<td bgcolor=71726A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Green Grey''<br>&emsp;Vallejo<br>&emsp;70.886
<td bgcolor=5A574B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''US Olive Drab / Brown Violet''<br>&emsp;Vallejo<br>&emsp;70.887
<td bgcolor=4F534A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Olive Grey''<br>&emsp;Vallejo<br>&emsp;70.888
<td bgcolor=4C4B49 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''USA Olive Drab''<br>&emsp;Vallejo<br>&emsp;70.889
<td bgcolor=505346 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Reflective Green / Refractive Green''<br>&emsp;Vallejo<br>&emsp;70.890
<td bgcolor=43924D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Intermediate Green''<br>&emsp;Vallejo<br>&emsp;70.891
<td bgcolor=494F49 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow Olive''<br>&emsp;Vallejo<br>&emsp;70.892
<td bgcolor=52554D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''US Dark Green''<br>&emsp;Vallejo<br>&emsp;70.893
<td bgcolor=4D5148 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cam. Olive Green''<br>&emsp;Vallejo<br>&emsp;70.894
<td bgcolor=51615B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gunship Green''<br>&emsp;Vallejo<br>&emsp;70.895
<td bgcolor=434A4B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ger. Cam. Extra Dark Green''<br>&emsp;Vallejo<br>&emsp;70.896
<td bgcolor=4B5052 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bronze Green''<br>&emsp;Vallejo<br>&emsp;70.897
<td bgcolor=3E454C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Sea Blue''<br>&emsp;Vallejo<br>&emsp;70.898
<td bgcolor=0D283C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Prussian Blue''<br>&emsp;Vallejo<br>&emsp;70.899
<td bgcolor=5B6775 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Mirage Blue''<br>&emsp;Vallejo<br>&emsp;70.900
<td bgcolor=658699 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pastel Blue''<br>&emsp;Vallejo<br>&emsp;70.901
<td bgcolor=6788BC style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Azure''<br>&emsp;Vallejo<br>&emsp;70.902
<td bgcolor=616C78 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Intermediate Blue''<br>&emsp;Vallejo<br>&emsp;70.903
<td bgcolor=69818A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Blue Grey''<br>&emsp;Vallejo<br>&emsp;70.904
<td bgcolor=7A8690 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue Grey Pale''<br>&emsp;Vallejo<br>&emsp;70.905
<td bgcolor=8EA5A7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pale Blue''<br>&emsp;Vallejo<br>&emsp;70.906
<td bgcolor=99ADB5 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pale Grey Blue''<br>&emsp;Vallejo<br>&emsp;70.907
<td bgcolor=B3232C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Carmine Red''<br>&emsp;Vallejo<br>&emsp;70.908
<td bgcolor=D3292B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Vermillion''<br>&emsp;Vallejo<br>&emsp;70.909
<td bgcolor=E24C25 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Orange Red''<br>&emsp;Vallejo<br>&emsp;70.910
<td bgcolor=F58846 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Orange''<br>&emsp;Vallejo<br>&emsp;70.911
<td bgcolor=B99471 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tan Yellow''<br>&emsp;Vallejo<br>&emsp;70.912
<td bgcolor=BD8F54 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow Ochre''<br>&emsp;Vallejo<br>&emsp;70.913
<td bgcolor=9F825F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Green Ochre''<br>&emsp;Vallejo<br>&emsp;70.914
<td bgcolor=FBE42D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Yellow''<br>&emsp;Vallejo<br>&emsp;70.915
<td bgcolor=E0B273 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sand Yellow''<br>&emsp;Vallejo<br>&emsp;70.916
<td bgcolor=D5B482 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Beige''<br>&emsp;Vallejo<br>&emsp;70.917
<td bgcolor=ECECCD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ivory''<br>&emsp;Vallejo<br>&emsp;70.918
<td bgcolor=FFFFFF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Foundation White / Cold White''<br>&emsp;Vallejo<br>&emsp;70.919
<td bgcolor=4F615F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Uniform''<br>&emsp;Vallejo<br>&emsp;70.920
<td bgcolor=6A5A44 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''English Uniform''<br>&emsp;Vallejo<br>&emsp;70.921
<td bgcolor=56694D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Uniform Green''<br>&emsp;Vallejo<br>&emsp;70.922
<td bgcolor=977943 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Japan Uniform WWII''<br>&emsp;Vallejo<br>&emsp;70.923
<td bgcolor=626052 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Uniform WWII''<br>&emsp;Vallejo<br>&emsp;70.924
<td bgcolor=1A3566 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blue''<br>&emsp;Vallejo<br>&emsp;70.925
<td bgcolor=8B262E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Red''<br>&emsp;Vallejo<br>&emsp;70.926
<td bgcolor=D29966 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Flesh''<br>&emsp;Vallejo<br>&emsp;70.927
<td bgcolor=F7D2BF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Flesh''<br>&emsp;Vallejo<br>&emsp;70.928
<td bgcolor=A57251 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Brown''<br>&emsp;Vallejo<br>&emsp;70.929
<td bgcolor=39669F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Blue''<br>&emsp;Vallejo<br>&emsp;70.930
<td bgcolor=6B5350 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Saddle Brown''<br>&emsp;Vallejo<br>&emsp;70.940
<td bgcolor=544E47 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burnt Umber''<br>&emsp;Vallejo<br>&emsp;70.941
<td bgcolor=439A6B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Green''<br>&emsp;Vallejo<br>&emsp;70.942
<td bgcolor=6C839F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Grey Blue''<br>&emsp;Vallejo<br>&emsp;70.943
<td bgcolor=D87D7C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Old Rose''<br>&emsp;Vallejo<br>&emsp;70.944
<td bgcolor=C2222D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Magenta''<br>&emsp;Vallejo<br>&emsp;70.945
<td bgcolor=864454 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Red''<br>&emsp;Vallejo<br>&emsp;70.946
<td bgcolor=B23F41 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Vermillion''<br>&emsp;Vallejo<br>&emsp;70.947
<td bgcolor=FAB05A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Golden Yellow''<br>&emsp;Vallejo<br>&emsp;70.948
<td bgcolor=F7E963 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Yellow''<br>&emsp;Vallejo<br>&emsp;70.949
<td bgcolor=222A2E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Black''<br>&emsp;Vallejo<br>&emsp;70.950
<td bgcolor=FFFFFF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''White''<br>&emsp;Vallejo<br>&emsp;70.951
<td bgcolor=F4ED38 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lemon Yellow''<br>&emsp;Vallejo<br>&emsp;70.952
<td bgcolor=FCB442 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flat Yellow''<br>&emsp;Vallejo<br>&emsp;70.953
<td bgcolor=BFD74B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow Green''<br>&emsp;Vallejo<br>&emsp;70.954
<td bgcolor=DC9F7B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flat Flesh''<br>&emsp;Vallejo<br>&emsp;70.955
<td bgcolor=C9503E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Clear Orange''<br>&emsp;Vallejo<br>&emsp;70.956
<td bgcolor=A33F40 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flat Red''<br>&emsp;Vallejo<br>&emsp;70.957
<td bgcolor=BF78B2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Pink''<br>&emsp;Vallejo<br>&emsp;70.958
<td bgcolor=6F5883 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Purple''<br>&emsp;Vallejo<br>&emsp;70.959
<td bgcolor=4B436E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Violet''<br>&emsp;Vallejo<br>&emsp;70.960
<td bgcolor=61C9F0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sky Blue''<br>&emsp;Vallejo<br>&emsp;70.961
<td bgcolor=486C9F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flat Blue''<br>&emsp;Vallejo<br>&emsp;70.962
<td bgcolor=2B6386 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Medium Blue''<br>&emsp;Vallejo<br>&emsp;70.963
<td bgcolor=576572 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Field Blue''<br>&emsp;Vallejo<br>&emsp;70.964
<td bgcolor=405D7B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Prussian Blue''<br>&emsp;Vallejo<br>&emsp;70.965
<td bgcolor=2C6C7F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Turquoise''<br>&emsp;Vallejo<br>&emsp;70.966
<td bgcolor=5C6C4C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Olive Green''<br>&emsp;Vallejo<br>&emsp;70.967
<td bgcolor=455A47 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flat Green''<br>&emsp;Vallejo<br>&emsp;70.968
<td bgcolor=187D62 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Park Green Flat''<br>&emsp;Vallejo<br>&emsp;70.969
<td bgcolor=316352 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Green''<br>&emsp;Vallejo<br>&emsp;70.970
<td bgcolor=AAB0A8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Green Grey''<br>&emsp;Vallejo<br>&emsp;70.971
<td bgcolor=729D97 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Green Blue''<br>&emsp;Vallejo<br>&emsp;70.972
<td bgcolor=95ACAF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Sea Grey''<br>&emsp;Vallejo<br>&emsp;70.973
<td bgcolor=819C82 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Green Sky''<br>&emsp;Vallejo<br>&emsp;70.974
<td bgcolor=40463D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Military Green''<br>&emsp;Vallejo<br>&emsp;70.975
<td bgcolor=C6AA7F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Buff''<br>&emsp;Vallejo<br>&emsp;70.976
<td bgcolor=AE8B67 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Desert Yellow''<br>&emsp;Vallejo<br>&emsp;70.977
<td bgcolor=8A8152 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Yellow''<br>&emsp;Vallejo<br>&emsp;70.978
<td bgcolor=454B49 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Cam. Dark Green''<br>&emsp;Vallejo<br>&emsp;70.979
<td bgcolor=3B4744 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Black Green''<br>&emsp;Vallejo<br>&emsp;70.980
<td bgcolor=B56D41 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Orange Brown''<br>&emsp;Vallejo<br>&emsp;70.981
<td bgcolor=7D3432 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cavalry Brown''<br>&emsp;Vallejo<br>&emsp;70.982
<td bgcolor=6C5642 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flat Earth''<br>&emsp;Vallejo<br>&emsp;70.983
<td bgcolor=59453F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flat Brown''<br>&emsp;Vallejo<br>&emsp;70.984
<td bgcolor=48211A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Hull Red''<br>&emsp;Vallejo<br>&emsp;70.985
<td bgcolor=A8ABA4 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deck Tan''<br>&emsp;Vallejo<br>&emsp;70.986
<td bgcolor=91887E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Medium Grey''<br>&emsp;Vallejo<br>&emsp;70.987
<td bgcolor=7C7560 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Khaki''<br>&emsp;Vallejo<br>&emsp;70.988
<td bgcolor=9BA0A7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sky Grey''<br>&emsp;Vallejo<br>&emsp;70.989
<td bgcolor=878F9C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Light Grey''<br>&emsp;Vallejo<br>&emsp;70.990
<td bgcolor=757980 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Sea Grey''<br>&emsp;Vallejo<br>&emsp;70.991
<td bgcolor=666F79 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Neutral Grey''<br>&emsp;Vallejo<br>&emsp;70.992
<td bgcolor=E9EBEC style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''White Grey''<br>&emsp;Vallejo<br>&emsp;70.993
<td bgcolor=485057 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark Grey''<br>&emsp;Vallejo<br>&emsp;70.994
<td bgcolor=40454E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Grey Dark''<br>&emsp;Vallejo<br>&emsp;70.995
<td bgcolor=C7AB5B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gold''<br>&emsp;Vallejo<br>&emsp;70.996
<td bgcolor=C2CDCD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Silver''<br>&emsp;Vallejo<br>&emsp;70.997
<td bgcolor=706A3C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bronze''<br>&emsp;Vallejo<br>&emsp;70.998
<td bgcolor=925A3D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Copper''<br>&emsp;Vallejo<br>&emsp;70.999
<iframe  width='100%' height='200px' style="border:0px #ffffff none;"  src="https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brown-sand-70876.jpg"></iframe>

---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-Khaki-70988-300x300.jpg]]
tag: Vallejo Paints
title: Khaki-70988

;Khaki-70988
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-Khaki-70988-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-Silvergrey-70883-300x300.jpg]]
tag: Vallejo Paints
title: Silvergrey-70883

;Silvergrey-70883
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-Silvergrey-70883-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-US-dark-green-70893-300x300.jpg]]
tag: Vallejo Paints
title: US-dark-green-70893

;US-dark-green-70893
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-US-dark-green-70893-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-US-field-drab-70873-300x300.jpg]]
tag: Vallejo Paints
title: US-field-drab-70873

;US-field-drab-70873
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-US-field-drab-70873-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-US-olive-drab-70887-300x300.jpg]]
tag: Vallejo Paints
title: US-olive-drab-70887

;US-olive-drab-70887
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-US-olive-drab-70887-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-amaranth-red-70829-300x300.jpg]]
tag: Vallejo Paints
title: amaranth-red-70829

;amaranth-red-70829
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-amaranth-red-70829-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-andrea-blue-70841-300x300.jpg]]
tag: Vallejo Paints
title: andrea-blue-70841

;andrea-blue-70841
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-andrea-blue-70841-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-azure-70902-300x300.jpg]]
tag: Vallejo Paints
title: azure-70902

;azure-70902
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-azure-70902-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-basalt-grey-70869-300x300.jpg]]
tag: Vallejo Paints
title: basalt-grey-70869

;basalt-grey-70869
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-basalt-grey-70869-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-basic-skintone-70815-300x300.jpg]]
tag: Vallejo Paints
title: basic-skintone-70815

;basic-skintone-70815
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-basic-skintone-70815-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-beige-70917-300x300.jpg]]
tag: Vallejo Paints
title: beige-70917

;beige-70917
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-beige-70917-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-beige-brown-70875-300x300.jpg]]
tag: Vallejo Paints
title: beige-brown-70875

;beige-brown-70875
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-beige-brown-70875-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-70950-300x300.jpg]]
tag: Vallejo Paints
title: black-70950

;black-70950
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-70950-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-glaze-70855-300x300.jpg]]
tag: Vallejo Paints
title: black-glaze-70855

;black-glaze-70855
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-glaze-70855-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-green-70980-300x300.jpg]]
tag: Vallejo Paints
title: black-green-70980

;black-green-70980
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-green-70980-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-grey-70862-300x300.jpg]]
tag: Vallejo Paints
title: black-grey-70862

;black-grey-70862
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-black-grey-70862-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-70925-300x300.jpg]]
tag: Vallejo Paints
title: blue-70925

;blue-70925
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-70925-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-fluorescent-70736-300x300.jpg]]
tag: Vallejo Paints
title: blue-fluorescent-70736

;blue-fluorescent-70736
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-fluorescent-70736-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-green-70808-300x300.jpg]]
tag: Vallejo Paints
title: blue-green-70808

;blue-green-70808
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-green-70808-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-grey-pale-70905-300x300.jpg]]
tag: Vallejo Paints
title: blue-grey-pale-70905

;blue-grey-pale-70905
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-grey-pale-70905-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-violet-70811-300x300.jpg]]
tag: Vallejo Paints
title: blue-violet-70811

;blue-violet-70811
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-blue-violet-70811-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brass-70801-300x300.jpg]]
tag: Vallejo Paints
title: brass-70801

;brass-70801
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brass-70801-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-bronze-70998-300x300.jpg]]
tag: Vallejo Paints
title: bronze-70998

;bronze-70998
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-bronze-70998-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-bronze-green-70897-300x300.jpg]]
tag: Vallejo Paints
title: bronze-green-70897

;bronze-green-70897
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-bronze-green-70897-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brown-glaze-70854-300x300.jpg]]
tag: Vallejo Paints
title: brown-glaze-70854

;brown-glaze-70854
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brown-glaze-70854-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brown-rose-70803-300x300.jpg]]
tag: Vallejo Paints
title: brown-rose-70803

;brown-rose-70803
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brown-rose-70803-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brown-sand-70876-300x300.jpg]]
tag: Vallejo Paints
title: brown-sand-70876

;brown-sand-70876
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-brown-sand-70876-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-buff-70976-300x300.jpg]]
tag: Vallejo Paints
title: buff-70976

;buff-70976
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-buff-70976-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-burnt-umber-70941-300x300.jpg]]
tag: Vallejo Paints
title: burnt-umber-70941

;burnt-umber-70941
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-burnt-umber-70941-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-camouflage-olive-green-70894-300x300.jpg]]
tag: Vallejo Paints
title: camouflage-olive-green-70894

;camouflage-olive-green-70894
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-camouflage-olive-green-70894-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-cavalry-brown-70982-300x300.jpg]]
tag: Vallejo Paints
title: cavalry-brown-70982

;cavalry-brown-70982
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-cavalry-brown-70982-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-chocolate-brown-70872-300x300.jpg]]
tag: Vallejo Paints
title: chocolate-brown-70872

;chocolate-brown-70872
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-chocolate-brown-70872-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-cold-white-70919-Rev01-300x300.jpg]]
tag: Vallejo Paints
title: cold-white-70919-Rev01

;cold-white-70919-Rev01
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-cold-white-70919-Rev01-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-copper-70999-300x300.jpg]]
tag: Vallejo Paints
title: copper-70999

;copper-70999
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-copper-70999-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-cork-brown-70843-300x300.jpg]]
tag: Vallejo Paints
title: cork-brown-70843

;cork-brown-70843
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-cork-brown-70843-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-blue-70930-300x300.jpg]]
tag: Vallejo Paints
title: dark-blue-70930

;dark-blue-70930
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-blue-70930-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-blue-grey-70904-300x300.jpg]]
tag: Vallejo Paints
title: dark-blue-grey-70904

;dark-blue-grey-70904
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-blue-grey-70904-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-bluegrey-70867-300x300.jpg]]
tag: Vallejo Paints
title: dark-bluegrey-70867

;dark-bluegrey-70867
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-bluegrey-70867-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-grey-70994-300x300.jpg]]
tag: Vallejo Paints
title: dark-grey-70994

;dark-grey-70994
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-grey-70994-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-prussian-blue-70899-300x300.jpg]]
tag: Vallejo Paints
title: dark-prussian-blue-70899

;dark-prussian-blue-70899
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-prussian-blue-70899-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-sand-70847-300x300.jpg]]
tag: Vallejo Paints
title: dark-sand-70847

;dark-sand-70847
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-sand-70847-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-sea-blue-70898-300x300.jpg]]
tag: Vallejo Paints
title: dark-sea-blue-70898

;dark-sea-blue-70898
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-sea-blue-70898-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-sea-grey-70991-300x300.jpg]]
tag: Vallejo Paints
title: dark-sea-grey-70991

;dark-sea-grey-70991
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-sea-grey-70991-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-seagreen-70868-300x300.jpg]]
tag: Vallejo Paints
title: dark-seagreen-70868

;dark-seagreen-70868
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-seagreen-70868-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-yellow-70978-300x300.jpg]]
tag: Vallejo Paints
title: dark-yellow-70978

;dark-yellow-70978
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-dark-yellow-70978-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deck-tan-70986-300x300.jpg]]
tag: Vallejo Paints
title: deck-tan-70986

;deck-tan-70986
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deck-tan-70986-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deep-green-70970-300x300.jpg]]
tag: Vallejo Paints
title: deep-green-70970

;deep-green-70970
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deep-green-70970-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deep-sky-blue-70844-300x300.jpg]]
tag: Vallejo Paints
title: deep-sky-blue-70844

;deep-sky-blue-70844
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deep-sky-blue-70844-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deep-yellow-70915-300x300.jpg]]
tag: Vallejo Paints
title: deep-yellow-70915

;deep-yellow-70915
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-deep-yellow-70915-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-desert-yellow-70977-300x300.jpg]]
tag: Vallejo Paints
title: desert-yellow-70977

;desert-yellow-70977
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-desert-yellow-70977-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-emerald-70838-300x300.jpg]]
tag: Vallejo Paints
title: emerald-70838

;emerald-70838
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-emerald-70838-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-english-uniform-70921-300x300.jpg]]
tag: Vallejo Paints
title: english-uniform-70921

;english-uniform-70921
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-english-uniform-70921-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-field-blue-70964-300x300.jpg]]
tag: Vallejo Paints
title: field-blue-70964

;field-blue-70964
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-field-blue-70964-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-blue-70962-300x300.jpg]]
tag: Vallejo Paints
title: flat-blue-70962

;flat-blue-70962
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-blue-70962-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-brown-70984-300x300.jpg]]
tag: Vallejo Paints
title: flat-brown-70984

;flat-brown-70984
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-brown-70984-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-earth-70983-300x300.jpg]]
tag: Vallejo Paints
title: flat-earth-70983

;flat-earth-70983
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-earth-70983-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-flesh-70955-300x300.jpg]]
tag: Vallejo Paints
title: flat-flesh-70955

;flat-flesh-70955
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-flesh-70955-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-green-70968-300x300.jpg]]
tag: Vallejo Paints
title: flat-green-70968

;flat-green-70968
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-green-70968-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-yellow-70953-300x300.jpg]]
tag: Vallejo Paints
title: flat-yellow-70953

;flat-yellow-70953
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-flat-yellow-70953-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-french-mirage-blue-70900-300x300.jpg]]
tag: Vallejo Paints
title: french-mirage-blue-70900

;french-mirage-blue-70900
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-french-mirage-blue-70900-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-beige-WWII-70821-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-beige-WWII-70821

;german-camouflage-beige-WWII-70821
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-beige-WWII-70821-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-black-brown-70822-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-black-brown-70822

;german-camouflage-black-brown-70822
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-black-brown-70822-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-bright-green-70833-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-bright-green-70833

;german-camouflage-bright-green-70833
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-bright-green-70833-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-dark-green-70979-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-dark-green-70979

;german-camouflage-dark-green-70979
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-dark-green-70979-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-extra-dark-green-70896-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-extra-dark-green-70896

;german-camouflage-extra-dark-green-70896
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-extra-dark-green-70896-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-med-brown-70826-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-med-brown-70826

;german-camouflage-med-brown-70826
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-med-brown-70826-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-orange-ochre-70824-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-orange-ochre-70824

;german-camouflage-orange-ochre-70824
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-orange-ochre-70824-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-pale-brown-70825-300x300.jpg]]
tag: Vallejo Paints
title: german-camouflage-pale-brown-70825

;german-camouflage-pale-brown-70825
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-camouflage-pale-brown-70825-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-fieldgrey-WWII-70830-300x300.jpg]]
tag: Vallejo Paints
title: german-fieldgrey-WWII-70830

;german-fieldgrey-WWII-70830
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-fieldgrey-WWII-70830-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-grey-70995-300x300.jpg]]
tag: Vallejo Paints
title: german-grey-70995

;german-grey-70995
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-grey-70995-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-uniform-70920-300x300.jpg]]
tag: Vallejo Paints
title: german-uniform-70920

;german-uniform-70920
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-uniform-70920-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-yellow-70806-300x300.jpg]]
tag: Vallejo Paints
title: german-yellow-70806

;german-yellow-70806
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-german-yellow-70806-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gloss-white-70842-300x300.jpg]]
tag: Vallejo Paints
title: gloss-white-70842

;gloss-white-70842
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gloss-white-70842-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-glossy-black-70861-300x300.jpg]]
tag: Vallejo Paints
title: glossy-black-70861

;glossy-black-70861
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-glossy-black-70861-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gold-70996-300x300.jpg]]
tag: Vallejo Paints
title: gold-70996

;gold-70996
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gold-70996-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-goldbrown-70877-300x300.jpg]]
tag: Vallejo Paints
title: goldbrown-70877

;goldbrown-70877
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-goldbrown-70877-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-golden-olive-70857-300x300.jpg]]
tag: Vallejo Paints
title: golden-olive-70857

;golden-olive-70857
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-golden-olive-70857-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-golden-yellow-70948-300x300.jpg]]
tag: Vallejo Paints
title: golden-yellow-70948

;golden-yellow-70948
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-golden-yellow-70948-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-brown-70879-300x300.jpg]]
tag: Vallejo Paints
title: green-brown-70879

;green-brown-70879
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-brown-70879-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-fluorescent-70737-300x300.jpg]]
tag: Vallejo Paints
title: green-fluorescent-70737

;green-fluorescent-70737
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-fluorescent-70737-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-grey-70886-300x300.jpg]]
tag: Vallejo Paints
title: green-grey-70886

;green-grey-70886
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-grey-70886-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-grey-70971-300x300.jpg]]
tag: Vallejo Paints
title: green-grey-70971

;green-grey-70971
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-grey-70971-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-ochre-70914-300x300.jpg]]
tag: Vallejo Paints
title: green-ochre-70914

;green-ochre-70914
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-ochre-70914-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-sky-70974-300x300.jpg]]
tag: Vallejo Paints
title: green-sky-70974

;green-sky-70974
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-green-sky-70974-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-grey-blue-70943-300x300.jpg]]
tag: Vallejo Paints
title: grey-blue-70943

;grey-blue-70943
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-grey-blue-70943-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-grey-green-70866-300x300.jpg]]
tag: Vallejo Paints
title: grey-green-70866

;grey-green-70866
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-grey-green-70866-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gunmetal-blue-70800-300x300.jpg]]
tag: Vallejo Paints
title: gunmetal-blue-70800

;gunmetal-blue-70800
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gunmetal-blue-70800-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gunmetal-grey-70863-300x300.jpg]]
tag: Vallejo Paints
title: gunmetal-grey-70863

;gunmetal-grey-70863
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gunmetal-grey-70863-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gunship-green-70895-300x300.jpg]]
tag: Vallejo Paints
title: gunship-green-70895

;gunship-green-70895
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-gunship-green-70895-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-hull-red-70985-300x300.jpg]]
tag: Vallejo Paints
title: hull-red-70985

;hull-red-70985
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-hull-red-70985-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ice-yellow-70858-300x300.jpg]]
tag: Vallejo Paints
title: ice-yellow-70858

;ice-yellow-70858
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ice-yellow-70858-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-intermediate-blue-70903-300x300.jpg]]
tag: Vallejo Paints
title: intermediate-blue-70903

;intermediate-blue-70903
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-intermediate-blue-70903-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-intermediate-green-70891-300x300.jpg]]
tag: Vallejo Paints
title: intermediate-green-70891

;intermediate-green-70891
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-intermediate-green-70891-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-iraqi-sand-70819-Rev01-300x300.jpg]]
tag: Vallejo Paints
title: iraqi-sand-70819-Rev01

;iraqi-sand-70819-Rev01
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-iraqi-sand-70819-Rev01-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ivory-70918-300x300.jpg]]
tag: Vallejo Paints
title: ivory-70918

;ivory-70918
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ivory-70918-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-japan-uniform-WWII-70923-300x300.jpg]]
tag: Vallejo Paints
title: japan-uniform-WWII-70923

;japan-uniform-WWII-70923
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-japan-uniform-WWII-70923-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-khaki-grey-70880-300x300.jpg]]
tag: Vallejo Paints
title: khaki-grey-70880

;khaki-grey-70880
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-khaki-grey-70880-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-leather-brown-70871-300x300.jpg]]
tag: Vallejo Paints
title: leather-brown-70871

;leather-brown-70871
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-leather-brown-70871-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-lemon-yellow-70952-300x300.jpg]]
tag: Vallejo Paints
title: lemon-yellow-70952

;lemon-yellow-70952
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-lemon-yellow-70952-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-brown-70929-300x300.jpg]]
tag: Vallejo Paints
title: light-brown-70929

;light-brown-70929
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-brown-70929-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-flesh-70928-300x300.jpg]]
tag: Vallejo Paints
title: light-flesh-70928

;light-flesh-70928
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-flesh-70928-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-green-70942-300x300.jpg]]
tag: Vallejo Paints
title: light-green-70942

;light-green-70942
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-green-70942-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-green-blue-70972-300x300.jpg]]
tag: Vallejo Paints
title: light-green-blue-70972

;light-green-blue-70972
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-green-blue-70972-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-grey-70990-300x300.jpg]]
tag: Vallejo Paints
title: light-grey-70990

;light-grey-70990
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-grey-70990-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-sea-grey-70973-300x300.jpg]]
tag: Vallejo Paints
title: light-sea-grey-70973

;light-sea-grey-70973
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-sea-grey-70973-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-turquoise-70840-300x300.jpg]]
tag: Vallejo Paints
title: light-turquoise-70840

;light-turquoise-70840
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-turquoise-70840-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-yellow-70949-300x300.jpg]]
tag: Vallejo Paints
title: light-yellow-70949

;light-yellow-70949
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-light-yellow-70949-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-lime-green-70827-300x300.jpg]]
tag: Vallejo Paints
title: lime-green-70827

;lime-green-70827
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-lime-green-70827-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-london-grey-70836-300x300.jpg]]
tag: Vallejo Paints
title: london-grey-70836

;london-grey-70836
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-london-grey-70836-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-luftwaffe-camouflage-green-70823-300x300.jpg]]
tag: Vallejo Paints
title: luftwaffe-camouflage-green-70823

;luftwaffe-camouflage-green-70823
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-luftwaffe-camouflage-green-70823-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-luftwaffe-uniform-WWII-70816-300x300.jpg]]
tag: Vallejo Paints
title: luftwaffe-uniform-WWII-70816

;luftwaffe-uniform-WWII-70816
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-luftwaffe-uniform-WWII-70816-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-magenta-70945-300x300.jpg]]
tag: Vallejo Paints
title: magenta-70945

;magenta-70945
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-magenta-70945-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-magenta-fluorescent-70735-300x300.jpg]]
tag: Vallejo Paints
title: magenta-fluorescent-70735

;magenta-fluorescent-70735
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-magenta-fluorescent-70735-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-mahogany-brown-70846-300x300.jpg]]
tag: Vallejo Paints
title: mahogany-brown-70846

;mahogany-brown-70846
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-mahogany-brown-70846-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-blue-70963-300x300.jpg]]
tag: Vallejo Paints
title: medium-blue-70963

;medium-blue-70963
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-blue-70963-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-grey-70987-300x300.jpg]]
tag: Vallejo Paints
title: medium-grey-70987

;medium-grey-70987
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-grey-70987-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-olive-70850-300x300.jpg]]
tag: Vallejo Paints
title: medium-olive-70850

;medium-olive-70850
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-olive-70850-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-sea-grey-70870-300x300.jpg]]
tag: Vallejo Paints
title: medium-sea-grey-70870

;medium-sea-grey-70870
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-medium-sea-grey-70870-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-middlestone-70882-300x300.jpg]]
tag: Vallejo Paints
title: middlestone-70882

;middlestone-70882
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-middlestone-70882-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-military-green-70975-300x300.jpg]]
tag: Vallejo Paints
title: military-green-70975

;military-green-70975
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-military-green-70975-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-natural-steel-70864-300x300.jpg]]
tag: Vallejo Paints
title: natural-steel-70864

;natural-steel-70864
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-natural-steel-70864-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-natural-wood-70834-300x300.jpg]]
tag: Vallejo Paints
title: natural-wood-70834

;natural-wood-70834
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-natural-wood-70834-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-neutral-grey-70992-300x300.jpg]]
tag: Vallejo Paints
title: neutral-grey-70992

;neutral-grey-70992
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-neutral-grey-70992-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ochre-brown-70856-300x300.jpg]]
tag: Vallejo Paints
title: ochre-brown-70856

;ochre-brown-70856
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ochre-brown-70856-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-offwhite-70820-300x300.jpg]]
tag: Vallejo Paints
title: offwhite-70820

;offwhite-70820
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-offwhite-70820-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-oily-steel-70865-300x300.jpg]]
tag: Vallejo Paints
title: oily-steel-70865

;oily-steel-70865
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-oily-steel-70865-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-old-gold-70878-300x300.jpg]]
tag: Vallejo Paints
title: old-gold-70878

;old-gold-70878
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-old-gold-70878-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-old-rose-70944-300x300.jpg]]
tag: Vallejo Paints
title: old-rose-70944

;old-rose-70944
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-old-rose-70944-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-olive-brown-70889-Rev01-300x300.jpg]]
tag: Vallejo Paints
title: olive-brown-70889-Rev01

;olive-brown-70889-Rev01
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-olive-brown-70889-Rev01-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-olive-green-70967-300x300.jpg]]
tag: Vallejo Paints
title: olive-green-70967

;olive-green-70967
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-olive-green-70967-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-olive-grey-70888-300x300.jpg]]
tag: Vallejo Paints
title: olive-grey-70888

;olive-grey-70888
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-olive-grey-70888-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-orange-brown-70981-300x300.jpg]]
tag: Vallejo Paints
title: orange-brown-70981

;orange-brown-70981
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-orange-brown-70981-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-orange-fluorescent-70733-300x300.jpg]]
tag: Vallejo Paints
title: orange-fluorescent-70733

;orange-fluorescent-70733
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-orange-fluorescent-70733-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-oxford-blue-70807-300x300.jpg]]
tag: Vallejo Paints
title: oxford-blue-70807

;oxford-blue-70807
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-oxford-blue-70807-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pale-blue-70906-300x300.jpg]]
tag: Vallejo Paints
title: pale-blue-70906

;pale-blue-70906
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pale-blue-70906-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pale-grey-blue-70907-300x300.jpg]]
tag: Vallejo Paints
title: pale-grey-blue-70907

;pale-grey-blue-70907
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pale-grey-blue-70907-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pale-sand-70837-300x300.jpg]]
tag: Vallejo Paints
title: pale-sand-70837

;pale-sand-70837
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pale-sand-70837-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-park-green-flat-70969-300x300.jpg]]
tag: Vallejo Paints
title: park-green-flat-70969

;park-green-flat-70969
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-park-green-flat-70969-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pastel-blue-70901-300x300.jpg]]
tag: Vallejo Paints
title: pastel-blue-70901

;pastel-blue-70901
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pastel-blue-70901-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pastel-green-70885-300x300.jpg]]
tag: Vallejo Paints
title: pastel-green-70885

;pastel-green-70885
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pastel-green-70885-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pink-70958-300x300.jpg]]
tag: Vallejo Paints
title: pink-70958

;pink-70958
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-pink-70958-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-prussian-blue-70965-300x300.jpg]]
tag: Vallejo Paints
title: prussian-blue-70965

;prussian-blue-70965
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-prussian-blue-70965-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-purple-70959-300x300.jpg]]
tag: Vallejo Paints
title: purple-70959

;purple-70959
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-purple-70959-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-red-leather-70818-300x300.jpg]]
tag: Vallejo Paints
title: red-leather-70818

;red-leather-70818
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-red-leather-70818-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-retractive-green-70890-300x300.jpg]]
tag: Vallejo Paints
title: retractive-green-70890

;retractive-green-70890
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-retractive-green-70890-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-royal-blue-70809-300x300.jpg]]
tag: Vallejo Paints
title: royal-blue-70809

;royal-blue-70809
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-royal-blue-70809-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-royal-purple-70810-300x300.jpg]]
tag: Vallejo Paints
title: royal-purple-70810

;royal-purple-70810
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-royal-purple-70810-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-russian-uniform-WWII-70924-300x300.jpg]]
tag: Vallejo Paints
title: russian-uniform-WWII-70924

;russian-uniform-WWII-70924
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-russian-uniform-WWII-70924-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-saddle-brown-70940-300x300.jpg]]
tag: Vallejo Paints
title: saddle-brown-70940

;saddle-brown-70940
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-saddle-brown-70940-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-salmon-rose-70835-300x300.jpg]]
tag: Vallejo Paints
title: salmon-rose-70835

;salmon-rose-70835
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-salmon-rose-70835-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sand-yellow-70916-300x300.jpg]]
tag: Vallejo Paints
title: sand-yellow-70916

;sand-yellow-70916
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sand-yellow-70916-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-silver-70997-300x300.jpg]]
tag: Vallejo Paints
title: silver-70997

;silver-70997
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-silver-70997-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sky-blue-70961-300x300.jpg]]
tag: Vallejo Paints
title: sky-blue-70961

;sky-blue-70961
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sky-blue-70961-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sky-grey-70989-300x300.jpg]]
tag: Vallejo Paints
title: sky-grey-70989

;sky-grey-70989
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sky-grey-70989-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-smoke-70939-300x300.jpg]]
tag: Vallejo Paints
title: smoke-70939

;smoke-70939
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-smoke-70939-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-stone-grey-70884-300x300.jpg]]
tag: Vallejo Paints
title: stone-grey-70884

;stone-grey-70884
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-stone-grey-70884-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sunset-red-70802-300x300.jpg]]
tag: Vallejo Paints
title: sunset-red-70802

;sunset-red-70802
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-sunset-red-70802-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-tan-earth-70874-300x300.jpg]]
tag: Vallejo Paints
title: tan-earth-70874

;tan-earth-70874
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-tan-earth-70874-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-tan-glaze-70831-300x300.jpg]]
tag: Vallejo Paints
title: tan-glaze-70831

;tan-glaze-70831
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-tan-glaze-70831-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-tan-yellow-70912-300x300.jpg]]
tag: Vallejo Paints
title: tan-yellow-70912

;tan-yellow-70912
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-tan-yellow-70912-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-blue-70938-300x300.jpg]]
tag: Vallejo Paints
title: transparent-blue-70938

;transparent-blue-70938
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-blue-70938-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-green-70936-300x300.jpg]]
tag: Vallejo Paints
title: transparent-green-70936

;transparent-green-70936
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-green-70936-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-orange-70935-300x300.jpg]]
tag: Vallejo Paints
title: transparent-orange-70935

;transparent-orange-70935
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-orange-70935-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-red-70934-300x300.jpg]]
tag: Vallejo Paints
title: transparent-red-70934

;transparent-red-70934
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-red-70934-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-yellow-70937-300x300.jpg]]
tag: Vallejo Paints
title: transparent-yellow-70937

;transparent-yellow-70937
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-transparent-yellow-70937-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-turquoise-70966-300x300.jpg]]
tag: Vallejo Paints
title: turquoise-70966

;turquoise-70966
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-turquoise-70966-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ultramarine-70839-300x300.jpg]]
tag: Vallejo Paints
title: ultramarine-70839

;ultramarine-70839
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-ultramarine-70839-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-uniform-green-70922-300x300.jpg]]
tag: Vallejo Paints
title: uniform-green-70922

;uniform-green-70922
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-uniform-green-70922-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-verdigris-glaze-70832-300x300.jpg]]
tag: Vallejo Paints
title: verdigris-glaze-70832

;verdigris-glaze-70832
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-verdigris-glaze-70832-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-violet-70960-300x300.jpg]]
tag: Vallejo Paints
title: violet-70960

;violet-70960
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-violet-70960-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-violet-red-70812-300x300.jpg]]
tag: Vallejo Paints
title: violet-red-70812

;violet-red-70812
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-violet-red-70812-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-white-70951-300x300.jpg]]
tag: Vallejo Paints
title: white-70951

;white-70951
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-white-70951-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-white-glaze-70853-300x300.jpg]]
tag: Vallejo Paints
title: white-glaze-70853

;white-glaze-70853
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-white-glaze-70853-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-white-grey-70993-300x300.jpg]]
tag: Vallejo Paints
title: white-grey-70993

;white-grey-70993
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-white-grey-70993-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-woodgrain-70828-300x300.jpg]]
tag: Vallejo Paints
title: woodgrain-70828

;woodgrain-70828
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-woodgrain-70828-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-fluorescent-70730-300x300.jpg]]
tag: Vallejo Paints
title: yellow-fluorescent-70730

;yellow-fluorescent-70730
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-fluorescent-70730-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-green-70881-300x300.jpg]]
tag: Vallejo Paints
title: yellow-green-70881

;yellow-green-70881
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-green-70881-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-green-70954-300x300.jpg]]
tag: Vallejo Paints
title: yellow-green-70954

;yellow-green-70954
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-green-70954-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-ochre-70913-300x300.jpg]]
tag: Vallejo Paints
title: yellow-ochre-70913

;yellow-ochre-70913
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-ochre-70913-300x300.jpg]] 


---

++
icon:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-olive-70892-300x300.jpg]]
tag: Vallejo Paints
title: yellow-olive-70892

;yellow-olive-70892
:[img[https://acrylicosvallejo.com/wp-content/uploads/2018/06/model-color-vallejo-yellow-olive-70892-300x300.jpg]] 
!!!✒[[Vallejo Paint Mixes for British Armour]]
<<tabs tabsList:"[tag[Vallejo Paint Mixes for British Armour]!title[Vallejo Paint Mixes for British Armour]!sort[modified]]" "$:/state/popup/tabs">>






;References
:https://www.thewargamespot.com/bef-g3g4-scheme-painting-guide/
:https://www.mafva.org/british-vehicle-camouflage-1939-45/?v=79cba1185463



I have collected Vallejo paint mixes for British tanks, primarily from missing-lynx, and put them together here as a reference both for myself and anyone else who finds them useful.  If you know of another combination and would like to see it added, please get in touch!

This list is organized by paint ID number.  I hope that is not confusing – it matches the order in the document by Mike Starmer and Mike Cooper, British Vehicle Camouflage, 1939-45.  The descriptions of the colours is taken from that document as well.

The following is an incomplete list, and I did not retain hyperlinks to the original discussions.  I will try to correct this in the future.
BS (British Standard) Colours

    24 (Deep Bronze Green)
        2 pts 70922 USA Uniform [084] + 1 pt 70888 Olive Grey [092] + 1 pt 70822 German Camo Black Brown [150] (Mike Starmer, 2010)
        70975 Military Green is just slightly lighter than the BS.381 standard (Mike Starmer, 2019)
    28 (Silver Grey)
        10 pts Vallejo 101 Green Grey + 10 pts Vallejo 001 White + 3 pts Vallejo 090 Reflective Green (“Royohboy”, 2007, Armorama)
        5 pts 70952 Lemon Yellow [011], 1 pt 70992 Neutral Grey [160], 2 pts 70951 White [001] (Camfield, 2016)
    33 (Blue-Grey)
    34 (Slate)
        6 parts German Fieldgrey [102], 3 parts Yellow Olive [087], 1 part
        white (Camfield, 2017)
    44 (Terracotta)
    46 (Red Oxide)
    49 (Light Purple Brown)
        70859 Black Red [35] (Mike Starmer, 2011)
    52 (Pale Cream)
    61 (Light Stone)
        70976 Buff [120] (Mike Starmer, 2011)
    62 (Middle Stone)
    63 (Dark Stone)
    64 (Portland Stone)
        70918 Ivory [5] (“needs to be slightly deeper in hue than this”) (Mike Starmer, 2011)  [Camfield notes: I don’t understand this.  Maybe Mike was going from a sample on the Vallejo website?  Ivory is EXTREMELY pale]
        4 pts 70806 German Yellow [012] , 1 pt 70891 Iraqi Sand [124] (Camfield, 2016)

SCC (Standard Camouflage Colours)

    1A (Dark Brown)
        70822 German Camo Black Brown [150] (Mike Starmer, 2011)
        or 5pts 70822 German Camo Black Brown [150] + 1pt 70871 Leather Brown [147]   (Mike Starmer, 2011)
    2 (Brown)
        70826 German Camo Medium [145] (Mike Starmer, 2011)
        or 3pts 70871 Leather Brown [147] + 2pts 70873 US Field Drab 142
    4 (Cup of Tea)
    7 (Warm Green)
    13 (Jungle Green)
    14 (Blue-Black/Charcoal)
    15 (Olive Drab)
        1pt 70888 Olive Grey [92] + 1pt 70924 Russian Uniform WWII [094] (Mike Starmer, 2009)
    16 (Very dark olive drab)
        70893 US Dark Green [095] (Mike Starmer, 2011)

Theatre Colours

    Desert Pink ZI
        2 pt 70.874 Model Color Tan Earth + 1 pt 71.109 Model Air Tan Earth + 2 pt White (Chris Camfield, 2016)
    Dark (Olive) Green PFI
        70893 US Dark Green [095] (Mike Starmer, 2011)
    Light Mud
        70988 Khaki [115] + touch of white (Mike Starmer, 2011)

Other Colours

    Khaki Green G3
        2 pts 70921 English Uniform [141] + 1 pt 70888 Khaki [115] + 1 pt 70822 German Camo Black Brown [150]  (Mike Starmer, 2016)
    Dark green G4
        70986 German Dark Green [99] (Mike Starmer, 2016)
    US Army Olive Drab No.9
        3 pts 70894 Russian Green [96] + 2 pts 70872 Chocolate Brown [149] (Mike Starmer, 2016)


;Paint Names
<<list-links "[library[Vallejo]sort[title]]">>
|!Project|!Shade|!Base|!Highlight|
|Mahdist - Clothing|{{Vallejo 70.876}}|{{Vallejo 70.976}}|{{Vallejo 70.837}}|
|Mahdist - Medium African Skin|{{Vallejo 70.984}}|{{Vallejo 70.875}}|{{Vallejo 70.874}}|

|!Project|!Shade|!Base|!Highlight|
| |{{Vallejo 70.000}}|{{Vallejo 70.000}}|{{Vallejo 70.000}}|
| |{{Vallejo 70.818}}|{{Vallejo 70.929}}|{{Vallejo 70.860}}|
| |{{Vallejo 70.818}}|{{Vallejo 70.981}}|{{Vallejo 70.856}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.871}}|{{Vallejo 70.874}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.872}}|{{Vallejo 70.875}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.872}}|{{Vallejo 70.984}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.940}}|{{Vallejo 70.876}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.941}}|{{Vallejo 70.873}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.941}}|{{Vallejo 70.921}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.984}}|{{Vallejo 70.846}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.984}}|{{Vallejo 70.940}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.985}}|{{Vallejo 70.846}}|
| |{{Vallejo 70.822}}|{{Vallejo 70.985}}|{{Vallejo 70.982}}|
| |{{Vallejo 70.826}}|{{Vallejo 70.825}}|{{Vallejo 70.843}}|
| |{{Vallejo 70.826}}|{{Vallejo 70.873}}|{{Vallejo 70.923}}|
| |{{Vallejo 70.826}}|{{Vallejo 70.875}}|{{Vallejo 70.843}}|
| |{{Vallejo 70.843}}|{{Vallejo 70.912}}|{{Vallejo 70.917}}|
| |{{Vallejo 70.846}}|{{Vallejo 70.843}}|{{Vallejo 70.912}}|
| |{{Vallejo 70.846}}|{{Vallejo 70.876}}|{{Vallejo 70.860}}|
| |{{Vallejo 70.846}}|{{Vallejo 70.940}}|{{Vallejo 70.818}}|
| |{{Vallejo 70.846}}|{{Vallejo 70.983}}|{{Vallejo 70.875}}|
| |{{Vallejo 70.871}}|{{Vallejo 70.846}}|{{Vallejo 70.875}}|
| |{{Vallejo 70.871}}|{{Vallejo 70.874}}|{{Vallejo 70.819}}|
| |{{Vallejo 70.871}}|{{Vallejo 70.921}}|{{Vallejo 70.847}}|
| |{{Vallejo 70.872}}|{{Vallejo 70.826}}|{{Vallejo 70.875}}|
| |{{Vallejo 70.872}}|{{Vallejo 70.846}}|{{Vallejo 70.929}}|
| |{{Vallejo 70.873}}|{{Vallejo 70.879}}|{{Vallejo 70.882}}|
| |{{Vallejo 70.873}}|{{Vallejo 70.882}}|{{Vallejo 70.976}}|
| |{{Vallejo 70.873}}|{{Vallejo 70.914}}|{{Vallejo 70.976}}|
| |{{Vallejo 70.874}}|{{Vallejo 70.977}}|{{Vallejo 70.917}}|
| |{{Vallejo 70.876}}|{{Vallejo 70.819}}|{{Vallejo 70.837}}|
| |{{Vallejo 70.879}}|{{Vallejo 70.914}}|{{Vallejo 70.819}}|
| |{{Vallejo 70.879}}|{{Vallejo 70.923}}|{{Vallejo 70.913}}|
| |{{Vallejo 70.881}}|{{Vallejo 70.978}}|{{Vallejo 70.976}}|
| |{{Vallejo 70.914}}|{{Vallejo 70.976}}|{{Vallejo 70.837}}|
| |{{Vallejo 70.921}}|{{Vallejo 70.880}}|{{Vallejo 70.821}}|
| |{{Vallejo 70.923}}|{{Vallejo 70.913}}|{{Vallejo 70.955}}|
| |{{Vallejo 70.924}}|{{Vallejo 70.988}}|{{Vallejo 70.987}}|
| |{{Vallejo 70.929}}|{{Vallejo 70.856}}|{{Vallejo 70.927}}|
| |{{Vallejo 70.929}}|{{Vallejo 70.860}}|{{Vallejo 70.955}}|
| |{{Vallejo 70.940}}|{{Vallejo 70.875}}|{{Vallejo 70.977}}|
| |{{Vallejo 70.940}}|{{Vallejo 70.981}}|{{Vallejo 70.929}}|
| |{{Vallejo 70.941}}|{{Vallejo 70.873}}|{{Vallejo 70.882}}|
| |{{Vallejo 70.941}}|{{Vallejo 70.873}}|{{Vallejo 70.914}}|
| |{{Vallejo 70.941}}|{{Vallejo 70.921}}|{{Vallejo 70.879}}|
| |{{Vallejo 70.941}}|{{Vallejo 70.921}}|{{Vallejo 70.880}}|
| |{{Vallejo 70.941}}|{{Vallejo 70.984}}|{{Vallejo 70.818}}|
| |{{Vallejo 70.941}}|{{Vallejo 70.988}}|{{Vallejo 70.976}}|
| |{{Vallejo 70.977}}|{{Vallejo 70.847}}|{{Vallejo 70.837}}|
| |{{Vallejo 70.977}}|{{Vallejo 70.877}}|{{Vallejo 70.912}}|
| |{{Vallejo 70.981}}|{{Vallejo 70.824}}|{{Vallejo 70.860}}|
| |{{Vallejo 70.982}}|{{Vallejo 70.818}}|{{Vallejo 70.929}}|
| |{{Vallejo 70.983}}|{{Vallejo 70.856}}|{{Vallejo 70.948}}|
| |{{Vallejo 70.983}}|{{Vallejo 70.874}}|{{Vallejo 70.843}}|
| |{{Vallejo 70.983}}|{{Vallejo 70.875}}|{{Vallejo 70.843}}|
| |{{Vallejo 70.983}}|{{Vallejo 70.876}}|{{Vallejo 70.819}}|
| |{{Vallejo 70.984}}|{{Vallejo 70.825}}|{{Vallejo 70.876}}|
| |{{Vallejo 70.984}}|{{Vallejo 70.875}}|{{Vallejo 70.917}}|
| |{{Vallejo 70.985}}|{{Vallejo 70.846}}|{{Vallejo 70.843}}|
| |{{Vallejo 70.985}}|{{Vallejo 70.982}}|{{Vallejo 70.818}}|
;Source
:http://www.valor-and-victory.com/
:https://boardgamegeek.com/thread/2532790/custom-games

Valor & Victory is a game of WWII Squad-Level Combat

Through the shattered ruins of a quaint European village, to the scorched sands of North Africa, and on the deadly beaches of a mist-shrouded Pacific island, Valor & Victory puts you in command of the troops and machines that fought across the battlefields of World War II.

Valor & Victory is a fast playing, easy to learn World War II squad-level game system. V&V gets you into the action quickly, without requiring you to learn a lot of minutiae and unnecessary detail. But don't let that fool you — Valor & Victory is a complete WWII wargaming system, covering infantry and armored combat, artillery and air strikes, snipers, close assaults, armored overruns, fortifications, and much more!

Valor & Victory may be easy to learn, but it's challenging and fun. So whether you're looking for an evening of serious wargaming action, or simply a quick battle at lunch, Valor & Victory delivers!
;Source
:http://www.vekn.net/what-is-v-tes
{{Imperial Vanquisher-class Battleship}}
{{Imperial Vengeance-class Grand Cruiser}}
{{Dark Eldar Venom Blade-class Frigate}}
[img[Very Civile Actions.fairfax.gif]]

"What is all our histories, but God showing himself, shaking and trampling on everything that he has not planted."

-Oliver Cromwell

[img[Very Civile Actions.img0559.png]]

[img[Very Civile Actions.img0560.png]]

[img[Very Civile Actions.img0561.png]]

[img[Very Civile Actions.img0562.png]]

[img[Very Civile Actions.img0563.png]]

[img[Very Civile Actions.img0564.png]]

[img[Very Civile Actions.img0565.png]]

[img[Very Civile Actions.img0566.png]]

[img[Very Civile Actions.img0567.png]]

!!An English Civil War variant for Spanish Fury, Actions!
also for use with "Tinker Fox", a campaign game of garrison warfare in the midlands of England, 1642-1646, and "Planter Fox" for the Irish Wars 1641-1652"

 ... with Cards for the Armies of Scotland, including Montrose's troops, as well as all of the regional forces of England (The North, Cornwall, The Oxford army, etc) and Ireland!

!!Very Civile Actions!
Why not? We have in our group about 800 figures that had been gathering dust for years. We used to play the ECW quite a bit in the old days, but it had fallen out of favour due to a lack of rules we could agree on. Yet we remembered the good old days, the days of William Brereton, Marmaduke Langdale, the Five Members.... and then we figured, hey, lets make some Actions cards, darn it! Since we're making cards, lets come up with a campaign system, and lets call it "Tinker Fox". Then we can finally get the "Battlefinder" system launched! That's how it happened. True story! Then we made "Planter Fox" as a surprise Christmas present for y'all.

!!!What do we get here?
OK. Even though we only meant to make cards for the troops inhabiting the midlands of England, we kind of covered the whole war.... except Ireland (a variant in the future?). So, you get Northern Royalists, Cornishmen, New Model Army, Firelockmen, Artillery, Dragoons, Ulster Catholics, and the Lagan Army, and both sides in the adventures of Montrose, from Gordon Horse to Highland Archers! Further, we made all new officer counters for you to develop those bonds gamers love to have with their cardboard heroes. Wait, there's more! We even redid a bunch of marker counters. We can't have a picture of a 16th century Spaniard surrendering on our prisoner counters!!!!!! So not you have a forlorn 17th century musketeer.

!!!What is the scale?
The scale is the same as in our other Actions! incarnations. Each stand is a squadron representing anything from 25-50 men (although you can make it 10-25 men if you so choose). Squadrons are grouped into companies of up to six stands. Each company is led by an officer (counters shown above) with his own characterists that he adds or takes away from the troops he commands. This allows you to refight smaller battles like Ripple Field, Powick Bridge,  or Hopton Heath as opposed to Naseby or Marston Moor.

{{Imperial Victory-class Battleship}}
{{Imperial Vigil-class Siege Frigate}}
{{Imperial Viper-class Scout Sloop}}
{{Tyranid Void Fiend-class Cruiser}}
{{Tyranid Void Prowler-class Light Cruiser}}
;Skill Plan
```
Advanced Drone Avionics 1
Afterburner 3
Amarr Cruiser 5
Amarr Destroyer 3
Amarr Frigate 3
CPU Management 3
Capacitor Emission Systems 3
Capacitor Management 4
Drones 5
Electronic Warfare 4
Energy Grid Upgrades 5
Gallente Drone Specialization 1
Gunnery 2
Heavy Assault Cruisers 1
Heavy Assault Missile Specialization 1
Heavy Assault Missiles 5
High Speed Maneuvering 4
Hull Upgrades 5
Light Drone Operation 5
Light Missiles 3
Mechanics 1
Medium Drone Operation 5
Missile Bombardment 4
Missile Launcher Operation 4
Navigation 3
Power Grid Management 3
Propulsion Jamming 2
Science 2
Spaceship Command 5
Weapon Upgrades 5
Shield Operation I
Drone Navigation I
Social I
EM Armor Compensation I
Explosive Armor Compensation I
Kinetic Armor Compensation I
Thermal Armor Compensation I
Magnetometric Sensor Compensation I
Fuel Conservation I
Negotiation I
Armor Layering I
Acceleration Control I
Drone Durability I
Caldari Drone Specialization I
Advanced Drone Avionics I
Shield Operation II
Drone Navigation II
Social II
Diplomacy I
Diplomacy II
Advanced Weapon Upgrades I
Command Burst Specialist I
EM Armor Compensation II
Explosive Armor Compensation II
Kinetic Armor Compensation II
Thermal Armor Compensation II
Magnetometric Sensor Compensation II
Fuel Conservation II
Negotiation II
Armor Layering II
Salvage Drone Operation II
Acceleration Control II
Amarr Drone Specialization II
Minmatar Drone Specialization II
Gallente Drone Specialization II
Sentry Drone Interfacing II
Gas Cloud Harvesting III
Drone Durability II
Caldari Drone Specialization II
Advanced Drone Avionics II
Shield Operation III
Shield Compensation I
Shield Compensation II
Mining Director II
Drone Navigation III
Trade III
Social III
Mining Connections I
Distribution Connections I
Security Connections I
Connections I
Criminal Connections I
Mining Connections II
Distribution Connections II
Security Connections II
Connections II
Criminal Connections II
Diplomacy III
Advanced Weapon Upgrades II
Command Burst Specialist II
Shield Compensation III
EM Armor Compensation III
Explosive Armor Compensation III
Kinetic Armor Compensation III
Thermal Armor Compensation III
Magnetometric Sensor Compensation III
Fuel Conservation III
Negotiation III
Mining Connections III
Distribution Connections III
Security Connections III
Armor Layering III
Connections III
Criminal Connections III
Salvage Drone Operation III
Acceleration Control III
Amarr Drone Specialization III
Minmatar Drone Specialization III
Gallente Drone Specialization III
Sentry Drone Interfacing III
Gas Cloud Harvesting IV
Drone Durability III
Caldari Drone Specialization III
Advanced Drone Avionics III
Shield Operation IV
Thermal Shield Compensation I
EM Shield Compensation I
Kinetic Shield Compensation I
Explosive Shield Compensation I
Thermal Shield Compensation II
EM Shield Compensation II
Kinetic Shield Compensation II
Explosive Shield Compensation II
Thermal Shield Compensation III
EM Shield Compensation III
Kinetic Shield Compensation III
Explosive Shield Compensation III
Drone Navigation IV
Mining Director III
Social IV
Fast Talk I
Fast Talk II
Fast Talk III
Diplomacy IV
Advanced Weapon Upgrades III
Command Burst Specialist III
EM Armor Compensation IV
Explosive Armor Compensation IV
Kinetic Armor Compensation IV
Thermal Armor Compensation IV
Thermal Shield Compensation IV
EM Shield Compensation IV
Kinetic Shield Compensation IV
Explosive Shield Compensation IV
Shield Compensation IV
Magnetometric Sensor Compensation IV
Fuel Conservation IV
Negotiation IV
Mining Connections IV
Distribution Connections IV
Security Connections IV
Shield Management V
Armor Layering IV
Connections IV
Criminal Connections IV
Weapon Upgrades V
Salvage Drone Operation IV
Acceleration Control IV
High Speed Maneuvering IV
Repair Systems V
Fast Talk IV
Afterburner V
Amarr Drone Specialization IV
Minmatar Drone Specialization IV
Gallente Drone Specialization IV
Sentry Drone Interfacing IV
Drone Durability IV
Caldari Drone Specialization IV
Advanced Drone Avionics IV
Gas Cloud Harvesting V
Shield Operation V
Drone Navigation V
Long Range Targeting V
Mining Director IV
Social V
Diplomacy V
Advanced Weapon Upgrades IV
Command Burst Specialist IV
Shield Upgrades V
Evasive Maneuvering V
EM Armor Compensation V
Explosive Armor Compensation V
Kinetic Armor Compensation V
Thermal Armor Compensation V
Thermal Shield Compensation V
EM Shield Compensation V
Kinetic Shield Compensation V
Explosive Shield Compensation V
Shield Compensation V
Magnetometric Sensor Compensation V
Fuel Conservation V
Negotiation V
Mining Connections V
Distribution Connections V
Security Connections V
Armor Layering V
Mining Upgrades V
Connections V
Criminal Connections V
Heavy Drone Operation V
Salvage Drone Operation V
Acceleration Control V
Drone Interfacing V
Deep Core Mining V
Fast Talk V
High Speed Maneuvering V
Amarr Drone Specialization V
Minmatar Drone Specialization V
Gallente Drone Specialization V
Sentry Drone Interfacing V
Caldari Drone Specialization V
Advanced Drone Avionics V
Drone Durability V
Mining Director V
Advanced Weapon Upgrades V
Command Burst Specialist V
Plagioclase Processing I
Scordite Processing I
Veldspar Processing I
Dark Ochre Processing I
Gneiss Processing I
Hedbergite Processing I
Spodumain Processing I
Arkonor Processing I
Bistot Processing I
Crokite Processing I
Plagioclase Processing II
Scordite Processing II
Veldspar Processing II
Dark Ochre Processing II
Gneiss Processing II
Hedbergite Processing II
Spodumain Processing II
Arkonor Processing II
Bistot Processing II
Crokite Processing II
Plagioclase Processing III
Scordite Processing III
Veldspar Processing III
Dark Ochre Processing III
Gneiss Processing III
Hedbergite Processing III
Spodumain Processing III
Arkonor Processing III
Bistot Processing III
Crokite Processing III
Hydromagnetic Physics III
Pyroxeres Processing IV
Plagioclase Processing IV
Scordite Processing IV
Veldspar Processing IV
Dark Ochre Processing IV
Gneiss Processing IV
Hedbergite Processing IV
Spodumain Processing IV
Arkonor Processing IV
Bistot Processing IV
Crokite Processing IV
Mercoxit Processing IV
Reprocessing V
Hemorphite Processing I
Jaspet Processing I
Kernite Processing I
Omber Processing I
Hemorphite Processing II
Jaspet Processing II
Kernite Processing II
Omber Processing II
Hemorphite Processing III
Jaspet Processing III
Kernite Processing III
Omber Processing III
Hemorphite Processing IV
Jaspet Processing IV
Kernite Processing IV
Omber Processing IV
Hydromagnetic Physics IV
Ice Processing I
Ice Processing II
Ice Processing III
Metallurgy V
Scrapmetal Processing I
Scrapmetal Processing II
Scrapmetal Processing III
Ice Processing IV
Scrapmetal Processing IV
Pyroxeres Processing V
Plagioclase Processing V
Scordite Processing V
Veldspar Processing V
Hemorphite Processing V
Jaspet Processing V
Kernite Processing V
Omber Processing V
Dark Ochre Processing V
Gneiss Processing V
Hedbergite Processing V
Spodumain Processing V
Arkonor Processing V
Bistot Processing V
Crokite Processing V
Mercoxit Processing V
Scrapmetal Processing V
Ice Processing V
Laboratory Operation III
Research III
Jury Rigging III
Armor Rigging I
Astronautics Rigging I
Drones Rigging I
Electronic Superiority Rigging I
Projectile Weapon Rigging I
Energy Weapon Rigging I
Hybrid Weapon Rigging I
Launcher Rigging I
Shield Rigging I
Armor Rigging II
Astronautics Rigging II
Drones Rigging II
Electronic Superiority Rigging II
Projectile Weapon Rigging II
Energy Weapon Rigging II
Hybrid Weapon Rigging II
Launcher Rigging II
Shield Rigging II
Advanced Industry III
Supply Chain Management III
Armor Rigging III
Astronautics Rigging III
Drones Rigging III
Electronic Superiority Rigging III
Projectile Weapon Rigging III
Energy Weapon Rigging III
Hybrid Weapon Rigging III
Launcher Rigging III
Shield Rigging III
Laboratory Operation IV
Scientific Networking I
Scientific Networking II
Scientific Networking III
Research IV
Jury Rigging IV
Supply Chain Management IV
Advanced Industry IV
Scientific Networking IV
Armor Rigging IV
Astronautics Rigging IV
Drones Rigging IV
Electronic Superiority Rigging IV
Projectile Weapon Rigging IV
Energy Weapon Rigging IV
Hybrid Weapon Rigging IV
Launcher Rigging IV
Shield Rigging IV
Laboratory Operation V
Advanced Laboratory Operation I
Advanced Laboratory Operation II
Advanced Laboratory Operation III
Research V
Advanced Laboratory Operation IV
Supply Chain Management V
Advanced Industry V
Capital Ship Construction I
Capital Ship Construction II
Capital Ship Construction III
Capital Ship Construction IV
Scientific Networking V
Advanced Mass Production V
Advanced Laboratory Operation V
Capital Ship Construction V
Resistance Phasing I
Capital Repair Systems I
Capital Shield Operation I
Resistance Phasing II
Micro Jump Drive Operation II
Capital Repair Systems II
Capital Shield Operation II
Resistance Phasing III
Micro Jump Drive Operation III
Capital Repair Systems III
Capital Shield Operation III
Capital Ships III
Resistance Phasing IV
Micro Jump Drive Operation IV
Capital Repair Systems IV
Capital Shield Operation IV
Resistance Phasing V
Capital Ships IV
Micro Jump Drive Operation V
Capital Repair Systems V
Capital Shield Operation V
Capital Ships V
```
Hand sculpted micro-scale 3d printed miniatures and designs. Generally for use with 6 - 15mm miniature scales. All files are 3d designs and must be printed, they are not physical models. 

;Source
:https://www.facebook.com/groups/1682441262062813/?ref=bookmarks  
\import [all[tiddlers+shadows]tag[$:/tags/Macro/Toc]]
[[✒|Wargames]]
<<multilevel-toc-expandable tag:"Wargames" stateTiddler:"state_Wargames">>

<td bgcolor=D4A225 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lemon''<br>&emsp;Wargames Foundry<br>&emsp;001A
<td bgcolor=F2DF20 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lemon''<br>&emsp;Wargames Foundry<br>&emsp;001B
<td bgcolor=F4EA6F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Lemon''<br>&emsp;Wargames Foundry<br>&emsp;001C
<td bgcolor=DFA128 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow''<br>&emsp;Wargames Foundry<br>&emsp;002A
<td bgcolor=ECCD24 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow''<br>&emsp;Wargames Foundry<br>&emsp;002B
<td bgcolor=F2E450 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Yellow''<br>&emsp;Wargames Foundry<br>&emsp;002C
<td bgcolor=D0792A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Orange''<br>&emsp;Wargames Foundry<br>&emsp;003A
<td bgcolor=D6892F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Orange''<br>&emsp;Wargames Foundry<br>&emsp;003B
<td bgcolor=E3B426 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Orange''<br>&emsp;Wargames Foundry<br>&emsp;003C
<td bgcolor=D68D27 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ochre''<br>&emsp;Wargames Foundry<br>&emsp;004A
<td bgcolor=E0A94F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ochre''<br>&emsp;Wargames Foundry<br>&emsp;004B
<td bgcolor=EDC853 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Ochre''<br>&emsp;Wargames Foundry<br>&emsp;004C
<td bgcolor=C1672B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flesh''<br>&emsp;Wargames Foundry<br>&emsp;005A
<td bgcolor=DC9555 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flesh''<br>&emsp;Wargames Foundry<br>&emsp;005B
<td bgcolor=EAC59B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Flesh''<br>&emsp;Wargames Foundry<br>&emsp;005C
<td bgcolor=59392C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dusky Flesh''<br>&emsp;Wargames Foundry<br>&emsp;006A
<td bgcolor=80572B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dusky Flesh''<br>&emsp;Wargames Foundry<br>&emsp;006B
<td bgcolor=B88A58 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dusky Flesh''<br>&emsp;Wargames Foundry<br>&emsp;006C
<td bgcolor=C29055 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Buff Leather''<br>&emsp;Wargames Foundry<br>&emsp;007A
<td bgcolor=E2B05B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Buff Leather''<br>&emsp;Wargames Foundry<br>&emsp;007B
<td bgcolor=E8C486 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Buff Leather''<br>&emsp;Wargames Foundry<br>&emsp;007C
<td bgcolor=C99764 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Canvas''<br>&emsp;Wargames Foundry<br>&emsp;008A
<td bgcolor=E0B97E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Canvas''<br>&emsp;Wargames Foundry<br>&emsp;008B
<td bgcolor=FAF1E2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Canvas''<br>&emsp;Wargames Foundry<br>&emsp;008C
<td bgcolor=D4A552 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bone Yard''<br>&emsp;Wargames Foundry<br>&emsp;009A
<td bgcolor=E3CD9E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bone Yard''<br>&emsp;Wargames Foundry<br>&emsp;009B
<td bgcolor=FAF4D2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bone Yard''<br>&emsp;Wargames Foundry<br>&emsp;009C
<td bgcolor=D9A768 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Base Sand''<br>&emsp;Wargames Foundry<br>&emsp;010A
<td bgcolor=E7C28B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Base Sand''<br>&emsp;Wargames Foundry<br>&emsp;010B
<td bgcolor=F2DCAB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Base Sand''<br>&emsp;Wargames Foundry<br>&emsp;010C
<td bgcolor=755733 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rawhide''<br>&emsp;Wargames Foundry<br>&emsp;011A
<td bgcolor=9E805E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rawhide''<br>&emsp;Wargames Foundry<br>&emsp;011B
<td bgcolor=AD997E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rawhide''<br>&emsp;Wargames Foundry<br>&emsp;011C
<td bgcolor=5C4D26 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Drab''<br>&emsp;Wargames Foundry<br>&emsp;012A
<td bgcolor=917C45 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Drab''<br>&emsp;Wargames Foundry<br>&emsp;012B
<td bgcolor=BFA97A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Drab''<br>&emsp;Wargames Foundry<br>&emsp;012C
<td bgcolor=663926 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Spearshaft''<br>&emsp;Wargames Foundry<br>&emsp;013A
<td bgcolor=9E623D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Spearshaft''<br>&emsp;Wargames Foundry<br>&emsp;013B
<td bgcolor=C29659 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Spearshaft''<br>&emsp;Wargames Foundry<br>&emsp;013C
<td bgcolor=553327 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tan''<br>&emsp;Wargames Foundry<br>&emsp;014A
<td bgcolor=9F5928 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tan''<br>&emsp;Wargames Foundry<br>&emsp;014B
<td bgcolor=BF763F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tan''<br>&emsp;Wargames Foundry<br>&emsp;014C
<td bgcolor=992C29 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Red''<br>&emsp;Wargames Foundry<br>&emsp;015A
<td bgcolor=C53E2A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Red''<br>&emsp;Wargames Foundry<br>&emsp;015B
<td bgcolor=CA622B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Red''<br>&emsp;Wargames Foundry<br>&emsp;015C
<td bgcolor=D16D6D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nipple Pink''<br>&emsp;Wargames Foundry<br>&emsp;016A
<td bgcolor=E3ACA5 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nipple Pink''<br>&emsp;Wargames Foundry<br>&emsp;016B
<td bgcolor=ECC8C3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Nipple Pink''<br>&emsp;Wargames Foundry<br>&emsp;016C
<td bgcolor=6B2525 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wine Stain Red''<br>&emsp;Wargames Foundry<br>&emsp;017A
<td bgcolor=BF456C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wine Stain Red''<br>&emsp;Wargames Foundry<br>&emsp;017B
<td bgcolor=CE7997 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Wine Stain Red''<br>&emsp;Wargames Foundry<br>&emsp;017C
<td bgcolor=6B1D47 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Shadow Pink''<br>&emsp;Wargames Foundry<br>&emsp;018A
<td bgcolor=AC3C86 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Shadow Pink''<br>&emsp;Wargames Foundry<br>&emsp;018B
<td bgcolor=DC63A0 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Shadow Pink''<br>&emsp;Wargames Foundry<br>&emsp;018C
<td bgcolor=451D5C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Royal Purple''<br>&emsp;Wargames Foundry<br>&emsp;019A
<td bgcolor=644F90 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Royal Purple''<br>&emsp;Wargames Foundry<br>&emsp;019B
<td bgcolor=8C73AA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Royal Purple''<br>&emsp;Wargames Foundry<br>&emsp;019C
<td bgcolor=232C31 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Blue''<br>&emsp;Wargames Foundry<br>&emsp;020A
<td bgcolor=2C415E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Blue''<br>&emsp;Wargames Foundry<br>&emsp;020B
<td bgcolor=31527D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Blue''<br>&emsp;Wargames Foundry<br>&emsp;020C
<td bgcolor=37578A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sky Blue''<br>&emsp;Wargames Foundry<br>&emsp;021A
<td bgcolor=4F8CC3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sky Blue''<br>&emsp;Wargames Foundry<br>&emsp;021B
<td bgcolor=74A4D4 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Sky Blue''<br>&emsp;Wargames Foundry<br>&emsp;021C
<td bgcolor=398EC7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Vivid Blue''<br>&emsp;Wargames Foundry<br>&emsp;022A
<td bgcolor=3CA6DA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Vivid Blue''<br>&emsp;Wargames Foundry<br>&emsp;022B
<td bgcolor=7EBDE8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Vivid Blue''<br>&emsp;Wargames Foundry<br>&emsp;022C
<td bgcolor=437DAD style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tomb Blue''<br>&emsp;Wargames Foundry<br>&emsp;023A
<td bgcolor=5BA7C7 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tomb Blue''<br>&emsp;Wargames Foundry<br>&emsp;023B
<td bgcolor=75B5D1 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Tomb Blue''<br>&emsp;Wargames Foundry<br>&emsp;023C
<td bgcolor=2F484F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Teal Blue''<br>&emsp;Wargames Foundry<br>&emsp;024A
<td bgcolor=38857F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Teal Blue''<br>&emsp;Wargames Foundry<br>&emsp;024B
<td bgcolor=3FA6A3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Teal Blue''<br>&emsp;Wargames Foundry<br>&emsp;024C
<td bgcolor=2C733D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Green''<br>&emsp;Wargames Foundry<br>&emsp;025A
<td bgcolor=30964A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Green''<br>&emsp;Wargames Foundry<br>&emsp;025B
<td bgcolor=5CAD68 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Green''<br>&emsp;Wargames Foundry<br>&emsp;025C
<td bgcolor=253028 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Forest Green''<br>&emsp;Wargames Foundry<br>&emsp;026A
<td bgcolor=507846 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Forest Green''<br>&emsp;Wargames Foundry<br>&emsp;026B
<td bgcolor=7AA379 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Forest Green''<br>&emsp;Wargames Foundry<br>&emsp;026C
<td bgcolor=373B2D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Storm Green''<br>&emsp;Wargames Foundry<br>&emsp;027A
<td bgcolor=47594B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Storm Green''<br>&emsp;Wargames Foundry<br>&emsp;027B
<td bgcolor=6D856D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Storm Green''<br>&emsp;Wargames Foundry<br>&emsp;027C
<td bgcolor=545D28 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Phlegm Green''<br>&emsp;Wargames Foundry<br>&emsp;028A
<td bgcolor=677037 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Phlegm Green''<br>&emsp;Wargames Foundry<br>&emsp;028B
<td bgcolor=8B9445 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Phlegm Green''<br>&emsp;Wargames Foundry<br>&emsp;028C
<td bgcolor=635D2B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Moss''<br>&emsp;Wargames Foundry<br>&emsp;029A
<td bgcolor=948647 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Moss''<br>&emsp;Wargames Foundry<br>&emsp;029B
<td bgcolor=B5A96D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Moss''<br>&emsp;Wargames Foundry<br>&emsp;029C
<td bgcolor=837C38 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Raw Linen''<br>&emsp;Wargames Foundry<br>&emsp;030A
<td bgcolor=D6AC24 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Raw Linen''<br>&emsp;Wargames Foundry<br>&emsp;030B
<td bgcolor=EDD863 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Raw Linen''<br>&emsp;Wargames Foundry<br>&emsp;030C
<td bgcolor=4A4740 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Granite''<br>&emsp;Wargames Foundry<br>&emsp;031A
<td bgcolor=5E5C4D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Granite''<br>&emsp;Wargames Foundry<br>&emsp;031B
<td bgcolor=949285 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Granite''<br>&emsp;Wargames Foundry<br>&emsp;031C
<td bgcolor=494E52 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Slate Grey''<br>&emsp;Wargames Foundry<br>&emsp;032A
<td bgcolor=616566 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Slate Grey''<br>&emsp;Wargames Foundry<br>&emsp;032B
<td bgcolor=878B8C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Slate Grey''<br>&emsp;Wargames Foundry<br>&emsp;032C
<td bgcolor=929491 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Arctic Grey''<br>&emsp;Wargames Foundry<br>&emsp;033A
<td bgcolor=C0C2C1 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Arctic Grey''<br>&emsp;Wargames Foundry<br>&emsp;033B
<td bgcolor=FFFFFF style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Arctic Grey''<br>&emsp;Wargames Foundry<br>&emsp;033C
<td bgcolor=151716 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Charcoal Black''<br>&emsp;Wargames Foundry<br>&emsp;034A
<td bgcolor=45413D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Charcoal Black''<br>&emsp;Wargames Foundry<br>&emsp;034B
<td bgcolor=5E5D5B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Charcoal Black''<br>&emsp;Wargames Foundry<br>&emsp;034C
<td bgcolor=625E5B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Chainmail''<br>&emsp;Wargames Foundry<br>&emsp;035A
<td bgcolor=7A7A7A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Armour''<br>&emsp;Wargames Foundry<br>&emsp;035B
<td bgcolor=A9A9A9 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Spearpoint''<br>&emsp;Wargames Foundry<br>&emsp;035C
<td bgcolor=754B28 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brazen''<br>&emsp;Wargames Foundry<br>&emsp;036A
<td bgcolor=E2792B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gold''<br>&emsp;Wargames Foundry<br>&emsp;036B
<td bgcolor=FFC630 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Shiny''<br>&emsp;Wargames Foundry<br>&emsp;036C
<td bgcolor=52272E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Terracotta''<br>&emsp;Wargames Foundry<br>&emsp;037A
<td bgcolor=96352F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Terracotta''<br>&emsp;Wargames Foundry<br>&emsp;037B
<td bgcolor=BB4543 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Terracotta''<br>&emsp;Wargames Foundry<br>&emsp;037C
<td bgcolor=AE0001 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Scarlet''<br>&emsp;Wargames Foundry<br>&emsp;038A
<td bgcolor=DB3503 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Scarlet''<br>&emsp;Wargames Foundry<br>&emsp;038B
<td bgcolor=F25101 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Scarlet''<br>&emsp;Wargames Foundry<br>&emsp;038C
<td bgcolor=274047 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Storm Blue''<br>&emsp;Wargames Foundry<br>&emsp;039A
<td bgcolor=344F64 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Storm Blue''<br>&emsp;Wargames Foundry<br>&emsp;039B
<td bgcolor=537287 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Storm Blue''<br>&emsp;Wargames Foundry<br>&emsp;039C
<td bgcolor=1C1759 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Violet''<br>&emsp;Wargames Foundry<br>&emsp;040A
<td bgcolor=42497D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Violet''<br>&emsp;Wargames Foundry<br>&emsp;040B
<td bgcolor=6C5DBA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Violet''<br>&emsp;Wargames Foundry<br>&emsp;040C
<td bgcolor=082803 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Bottle Green''<br>&emsp;Wargames Foundry<br>&emsp;041A
<td bgcolor=104414 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Bottle Green''<br>&emsp;Wargames Foundry<br>&emsp;041B
<td bgcolor=116416 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bright Bottle Green''<br>&emsp;Wargames Foundry<br>&emsp;041C
<td bgcolor=2C110A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bay Brown''<br>&emsp;Wargames Foundry<br>&emsp;042A
<td bgcolor=663121 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bay Brown''<br>&emsp;Wargames Foundry<br>&emsp;042B
<td bgcolor=854306 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bay Brown''<br>&emsp;Wargames Foundry<br>&emsp;042C
<td bgcolor=797057 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burnished Copper''<br>&emsp;Wargames Foundry<br>&emsp;043A
<td bgcolor=8A7A58 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burnished Copper''<br>&emsp;Wargames Foundry<br>&emsp;043B
<td bgcolor=B28373 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burnished Copper''<br>&emsp;Wargames Foundry<br>&emsp;043C
<td bgcolor=F1AA68 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burning Gold''<br>&emsp;Wargames Foundry<br>&emsp;044A
<td bgcolor=F6B678 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burning Gold''<br>&emsp;Wargames Foundry<br>&emsp;044B
<td bgcolor=DADD98 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Burning Gold''<br>&emsp;Wargames Foundry<br>&emsp;044C
<td bgcolor=402605 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brown Leather''<br>&emsp;Wargames Foundry<br>&emsp;045A
<td bgcolor=744406 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brown Leather''<br>&emsp;Wargames Foundry<br>&emsp;045B
<td bgcolor=9E6806 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Brown Leather''<br>&emsp;Wargames Foundry<br>&emsp;045C
<td bgcolor=649A7A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cadaverous''<br>&emsp;Wargames Foundry<br>&emsp;046A
<td bgcolor=8EC58E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cadaverous''<br>&emsp;Wargames Foundry<br>&emsp;046B
<td bgcolor=B6E0B8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Cadaverous''<br>&emsp;Wargames Foundry<br>&emsp;046C
<td bgcolor=8F5443 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Copper Wash''<br>&emsp;Wargames Foundry<br>&emsp;047A
<td bgcolor=573A2C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Chestnut''<br>&emsp;Wargames Foundry<br>&emsp;053A
<td bgcolor=804000 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Chestnut''<br>&emsp;Wargames Foundry<br>&emsp;053B
<td bgcolor=C26100 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Chestnut''<br>&emsp;Wargames Foundry<br>&emsp;053C
<td bgcolor=381916 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Conker Brown''<br>&emsp;Wargames Foundry<br>&emsp;054A
<td bgcolor=613504 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Conker Brown''<br>&emsp;Wargames Foundry<br>&emsp;054B
<td bgcolor=804000 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Conker Brown''<br>&emsp;Wargames Foundry<br>&emsp;054C
<td bgcolor=945101 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Butter Fudges''<br>&emsp;Wargames Foundry<br>&emsp;055A
<td bgcolor=D27F05 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Butter Fudges''<br>&emsp;Wargames Foundry<br>&emsp;055B
<td bgcolor=E99B03 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Butter Fudges''<br>&emsp;Wargames Foundry<br>&emsp;055C
<td bgcolor=9F6905 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Palomino''<br>&emsp;Wargames Foundry<br>&emsp;056A
<td bgcolor=DB9B5B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Palomino''<br>&emsp;Wargames Foundry<br>&emsp;056B
<td bgcolor=F2C783 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Palomino''<br>&emsp;Wargames Foundry<br>&emsp;056C
<td bgcolor=4C555A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stone''<br>&emsp;Wargames Foundry<br>&emsp;057A
<td bgcolor=65767D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stone''<br>&emsp;Wargames Foundry<br>&emsp;057B
<td bgcolor=7D93A8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Stone''<br>&emsp;Wargames Foundry<br>&emsp;057C
<td bgcolor=32001B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Mauve''<br>&emsp;Wargames Foundry<br>&emsp;058A
<td bgcolor=55002A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Mauve''<br>&emsp;Wargames Foundry<br>&emsp;058B
<td bgcolor=990F5A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Mauve''<br>&emsp;Wargames Foundry<br>&emsp;058C
<td bgcolor=5A0A09 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Madder Red''<br>&emsp;Wargames Foundry<br>&emsp;060A
<td bgcolor=8A2219 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Madder Red''<br>&emsp;Wargames Foundry<br>&emsp;060B
<td bgcolor=BD1717 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Madder Red''<br>&emsp;Wargames Foundry<br>&emsp;060C
<td bgcolor=2F1D1D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Peaty Brown''<br>&emsp;Wargames Foundry<br>&emsp;061A
<td bgcolor=544039 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Peaty Brown''<br>&emsp;Wargames Foundry<br>&emsp;061B
<td bgcolor=706144 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Peaty Brown''<br>&emsp;Wargames Foundry<br>&emsp;061C
<td bgcolor=2D5474 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Night Sky''<br>&emsp;Wargames Foundry<br>&emsp;062A
<td bgcolor=356373 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Night Sky''<br>&emsp;Wargames Foundry<br>&emsp;062B
<td bgcolor=40798D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Night Sky''<br>&emsp;Wargames Foundry<br>&emsp;062C
<td bgcolor=383431 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Quagmire''<br>&emsp;Wargames Foundry<br>&emsp;063A
<td bgcolor=474A37 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Quagmire''<br>&emsp;Wargames Foundry<br>&emsp;063B
<td bgcolor=737253 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Quagmire''<br>&emsp;Wargames Foundry<br>&emsp;063C
<td bgcolor=3B0D27 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Maroon''<br>&emsp;Wargames Foundry<br>&emsp;064A
<td bgcolor=75325E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Maroon''<br>&emsp;Wargames Foundry<br>&emsp;064B
<td bgcolor=A83563 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Deep Maroon''<br>&emsp;Wargames Foundry<br>&emsp;064C
<td bgcolor=152638 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Blue''<br>&emsp;Wargames Foundry<br>&emsp;065A
<td bgcolor=1D335C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Blue''<br>&emsp;Wargames Foundry<br>&emsp;065B
<td bgcolor=1B4669 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Blue''<br>&emsp;Wargames Foundry<br>&emsp;065C
<td bgcolor=090D16 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Prussian Blue''<br>&emsp;Wargames Foundry<br>&emsp;066A
<td bgcolor=0F1E34 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Prussian Blue''<br>&emsp;Wargames Foundry<br>&emsp;066B
<td bgcolor=0E2B53 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Prussian Blue''<br>&emsp;Wargames Foundry<br>&emsp;066C
<td bgcolor=CDD4CC style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Austrian White''<br>&emsp;Wargames Foundry<br>&emsp;067A
<td bgcolor=DADFDB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Austrian White''<br>&emsp;Wargames Foundry<br>&emsp;067B
<td bgcolor=F2F2F2 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Austrian White''<br>&emsp;Wargames Foundry<br>&emsp;067C
<td bgcolor=A61B1E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Redcoat''<br>&emsp;Wargames Foundry<br>&emsp;068A
<td bgcolor=F50008 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Redcoat''<br>&emsp;Wargames Foundry<br>&emsp;068B
<td bgcolor=E4502C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Redcoat''<br>&emsp;Wargames Foundry<br>&emsp;068C
<td bgcolor=1C291F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Green''<br>&emsp;Wargames Foundry<br>&emsp;069A
<td bgcolor=203727 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Green''<br>&emsp;Wargames Foundry<br>&emsp;069B
<td bgcolor=2E4030 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Green''<br>&emsp;Wargames Foundry<br>&emsp;069C
<td bgcolor=254D35 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Dragoon Green''<br>&emsp;Wargames Foundry<br>&emsp;070A
<td bgcolor=356334 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Dragoon Green''<br>&emsp;Wargames Foundry<br>&emsp;070B
<td bgcolor=6A8A41 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Dragoon Green''<br>&emsp;Wargames Foundry<br>&emsp;070C
<td bgcolor=152A2D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Chasseur A Chevel Green''<br>&emsp;Wargames Foundry<br>&emsp;071A
<td bgcolor=1C3B35 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Chasseur A Chevel Green''<br>&emsp;Wargames Foundry<br>&emsp;071B
<td bgcolor=2B5746 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Chasseur A Chevel Green''<br>&emsp;Wargames Foundry<br>&emsp;071C
<td bgcolor=281B25 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Musket Stock Brown''<br>&emsp;Wargames Foundry<br>&emsp;072A
<td bgcolor=54332C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Musket Stock Brown''<br>&emsp;Wargames Foundry<br>&emsp;072B
<td bgcolor=763539 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Musket Stock Brown''<br>&emsp;Wargames Foundry<br>&emsp;072C
<td bgcolor=183F7A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bavarian Cornflower Blue''<br>&emsp;Wargames Foundry<br>&emsp;073A
<td bgcolor=0D74D1 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bavarian Cornflower Blue''<br>&emsp;Wargames Foundry<br>&emsp;073B
<td bgcolor=1C93E3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bavarian Cornflower Blue''<br>&emsp;Wargames Foundry<br>&emsp;073C
<td bgcolor=243640 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Rotal Blue''<br>&emsp;Wargames Foundry<br>&emsp;074A
<td bgcolor=253952 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Rotal Blue''<br>&emsp;Wargames Foundry<br>&emsp;074B
<td bgcolor=11396A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Rotal Blue''<br>&emsp;Wargames Foundry<br>&emsp;074C
<td bgcolor=1B567E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Blue Grey''<br>&emsp;Wargames Foundry<br>&emsp;075A
<td bgcolor=60768E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Blue Grey''<br>&emsp;Wargames Foundry<br>&emsp;075B
<td bgcolor=7590AB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Blue Grey''<br>&emsp;Wargames Foundry<br>&emsp;075C
<td bgcolor=2C5B91 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Hussar Sky Blue''<br>&emsp;Wargames Foundry<br>&emsp;076A
<td bgcolor=4C82BA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Hussar Sky Blue''<br>&emsp;Wargames Foundry<br>&emsp;076B
<td bgcolor=7CB1E3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Hussar Sky Blue''<br>&emsp;Wargames Foundry<br>&emsp;076C
<td bgcolor=69726D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Early Field Grey''<br>&emsp;Wargames Foundry<br>&emsp;077A
<td bgcolor=7A8B81 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Early Field Grey''<br>&emsp;Wargames Foundry<br>&emsp;077B
<td bgcolor=88998F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Early Field Grey''<br>&emsp;Wargames Foundry<br>&emsp;077C
<td bgcolor=5D6665 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Late Field Grey''<br>&emsp;Wargames Foundry<br>&emsp;078A
<td bgcolor=6C7A7B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Late Field Grey''<br>&emsp;Wargames Foundry<br>&emsp;078B
<td bgcolor=7B8A89 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Late Field Grey''<br>&emsp;Wargames Foundry<br>&emsp;078C
<td bgcolor=68674B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Summer Tan''<br>&emsp;Wargames Foundry<br>&emsp;079A
<td bgcolor=7D7648 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Summer Tan''<br>&emsp;Wargames Foundry<br>&emsp;079B
<td bgcolor=9A8C60 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Summer Tan''<br>&emsp;Wargames Foundry<br>&emsp;079C
<td bgcolor=918B73 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Summer Drab''<br>&emsp;Wargames Foundry<br>&emsp;080A
<td bgcolor=ABA688 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Summer Drab''<br>&emsp;Wargames Foundry<br>&emsp;080B
<td bgcolor=CAC69E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Summer Drab''<br>&emsp;Wargames Foundry<br>&emsp;080C
<td bgcolor=474B34 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Equipment Green''<br>&emsp;Wargames Foundry<br>&emsp;081A
<td bgcolor=585D3F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Equipment Green''<br>&emsp;Wargames Foundry<br>&emsp;081B
<td bgcolor=707743 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Equipment Green''<br>&emsp;Wargames Foundry<br>&emsp;081C
<td bgcolor=878554 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Helmet Green''<br>&emsp;Wargames Foundry<br>&emsp;082A
<td bgcolor=A1A067 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Helmet Green''<br>&emsp;Wargames Foundry<br>&emsp;082B
<td bgcolor=B6B07D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Helmet Green''<br>&emsp;Wargames Foundry<br>&emsp;082C
<td bgcolor=3C332C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Brown''<br>&emsp;Wargames Foundry<br>&emsp;083A
<td bgcolor=504030 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Brown''<br>&emsp;Wargames Foundry<br>&emsp;083B
<td bgcolor=685846 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Brown''<br>&emsp;Wargames Foundry<br>&emsp;083C
<td bgcolor=3F4B3F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Green''<br>&emsp;Wargames Foundry<br>&emsp;084A
<td bgcolor=425B45 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Green''<br>&emsp;Wargames Foundry<br>&emsp;084B
<td bgcolor=58805D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Green''<br>&emsp;Wargames Foundry<br>&emsp;084C
<td bgcolor=676453 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Tan''<br>&emsp;Wargames Foundry<br>&emsp;085A
<td bgcolor=7C7562 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Tan''<br>&emsp;Wargames Foundry<br>&emsp;085B
<td bgcolor=9D9477 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Splinter Tan''<br>&emsp;Wargames Foundry<br>&emsp;085C
<td bgcolor=B7734C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Oak Leaf Orange''<br>&emsp;Wargames Foundry<br>&emsp;086A
<td bgcolor=D9763B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Oak Leaf Orange''<br>&emsp;Wargames Foundry<br>&emsp;086B
<td bgcolor=ED9666 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Oak Leaf Orange''<br>&emsp;Wargames Foundry<br>&emsp;086C
<td bgcolor=6D773A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Pea Pattern Green''<br>&emsp;Wargames Foundry<br>&emsp;087A
<td bgcolor=83913C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Pea Pattern Green''<br>&emsp;Wargames Foundry<br>&emsp;087B
<td bgcolor=9EAA56 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Pea Pattern Green''<br>&emsp;Wargames Foundry<br>&emsp;087C
<td bgcolor=987C64 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Pea Pattern Tan''<br>&emsp;Wargames Foundry<br>&emsp;088A
<td bgcolor=9A7C64 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Pea Pattern Tan''<br>&emsp;Wargames Foundry<br>&emsp;088B
<td bgcolor=CCA37D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''German Pea Pattern Tan''<br>&emsp;Wargames Foundry<br>&emsp;088C
<td bgcolor=7D736A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP089A British Equipment Tan''<br>&emsp;Wargames Foundry<br>&emsp;089A
<td bgcolor=86786D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP089B British Equipment Tan''<br>&emsp;Wargames Foundry<br>&emsp;089B
<td bgcolor=AA9B88 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP089C British Equipment Tan''<br>&emsp;Wargames Foundry<br>&emsp;089C
<td bgcolor=B7AE87 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Equipment Canvas''<br>&emsp;Wargames Foundry<br>&emsp;090A
<td bgcolor=CBC381 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Equipment Canvas''<br>&emsp;Wargames Foundry<br>&emsp;090B
<td bgcolor=EAE0AA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Equipment Canvas''<br>&emsp;Wargames Foundry<br>&emsp;090C
<td bgcolor=485247 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP091A British Blanco Green''<br>&emsp;Wargames Foundry<br>&emsp;091A
<td bgcolor=48704D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP091B British Blanco Green''<br>&emsp;Wargames Foundry<br>&emsp;091B
<td bgcolor=6A8775 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP091C British Blanco Green''<br>&emsp;Wargames Foundry<br>&emsp;091C
<td bgcolor=AD9F7A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''American Tan''<br>&emsp;Wargames Foundry<br>&emsp;092A
<td bgcolor=C2B08A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''American Tan''<br>&emsp;Wargames Foundry<br>&emsp;092B
<td bgcolor=DDC9A3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''American Tan''<br>&emsp;Wargames Foundry<br>&emsp;092C
<td bgcolor=5A554F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP093A American Green''<br>&emsp;Wargames Foundry<br>&emsp;093A
<td bgcolor=737067 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP093B American Green''<br>&emsp;Wargames Foundry<br>&emsp;093B
<td bgcolor=808274 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP093C American Green''<br>&emsp;Wargames Foundry<br>&emsp;093C
<td bgcolor=31363C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''American Olive Green''<br>&emsp;Wargames Foundry<br>&emsp;094A
<td bgcolor=343C48 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''American Olive Green''<br>&emsp;Wargames Foundry<br>&emsp;094B
<td bgcolor=395A4F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''American Olive Green''<br>&emsp;Wargames Foundry<br>&emsp;094C
<td bgcolor=473646 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Winter Brown''<br>&emsp;Wargames Foundry<br>&emsp;095A
<td bgcolor=4C394A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Winter Brown''<br>&emsp;Wargames Foundry<br>&emsp;095B
<td bgcolor=66525D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Soviet Winter Brown''<br>&emsp;Wargames Foundry<br>&emsp;095C
<td bgcolor=504E51 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP096A Soviet Winter Green''<br>&emsp;Wargames Foundry<br>&emsp;096A
<td bgcolor=666263 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP096B Soviet Winter Green''<br>&emsp;Wargames Foundry<br>&emsp;096B
<td bgcolor=7E786A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP096C Soviet Winter Green''<br>&emsp;Wargames Foundry<br>&emsp;096C
<td bgcolor=644D2B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Denison Brown''<br>&emsp;Wargames Foundry<br>&emsp;097A
<td bgcolor=71523D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Denison Brown''<br>&emsp;Wargames Foundry<br>&emsp;097B
<td bgcolor=806B5A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Denison Brown''<br>&emsp;Wargames Foundry<br>&emsp;097C
<td bgcolor=323234 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP098A British Denison Green''<br>&emsp;Wargames Foundry<br>&emsp;098A
<td bgcolor=505443 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP098B British Denison Green''<br>&emsp;Wargames Foundry<br>&emsp;098B
<td bgcolor=646D5A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP098C British Denison Green Ligh''<br>&emsp;Wargames Foundry<br>&emsp;098C
<td bgcolor=816A62 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP099A British Denison Tan''<br>&emsp;Wargames Foundry<br>&emsp;099A
<td bgcolor=9A7964 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP099B British Denison Tan''<br>&emsp;Wargames Foundry<br>&emsp;099B
<td bgcolor=B3957D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP099C British Denison Tan''<br>&emsp;Wargames Foundry<br>&emsp;099C
<td bgcolor=816A62 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP100A British Uniform Brown''<br>&emsp;Wargames Foundry<br>&emsp;100A
<td bgcolor=745540 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP100B British Uniform Brown''<br>&emsp;Wargames Foundry<br>&emsp;100B
<td bgcolor=93603F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''PP100C British Uniform Brown''<br>&emsp;Wargames Foundry<br>&emsp;100C
<td bgcolor=282F39 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Equipment Black''<br>&emsp;Wargames Foundry<br>&emsp;101A
<td bgcolor=333B3E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Equipment Black''<br>&emsp;Wargames Foundry<br>&emsp;101B
<td bgcolor=3B4C5E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Equipment Black''<br>&emsp;Wargames Foundry<br>&emsp;101C
<td bgcolor=524745 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Red Oxide''<br>&emsp;Wargames Foundry<br>&emsp;102A
<td bgcolor=594345 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Red Oxide''<br>&emsp;Wargames Foundry<br>&emsp;102B
<td bgcolor=664347 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Red Oxide''<br>&emsp;Wargames Foundry<br>&emsp;102C
<td bgcolor=9A7839 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bronze Barrel''<br>&emsp;Wargames Foundry<br>&emsp;103A
<td bgcolor=9E7E58 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bronze Barrel''<br>&emsp;Wargames Foundry<br>&emsp;103B
<td bgcolor=DCC36C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Bronze Barrel''<br>&emsp;Wargames Foundry<br>&emsp;103C
<td bgcolor=757575 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gun Metal''<br>&emsp;Wargames Foundry<br>&emsp;104A
<td bgcolor=777777 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gun Metal''<br>&emsp;Wargames Foundry<br>&emsp;104B
<td bgcolor=BBBBBB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Gun Metal''<br>&emsp;Wargames Foundry<br>&emsp;104C
<td bgcolor=313131 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blackened Barrel''<br>&emsp;Wargames Foundry<br>&emsp;105A
<td bgcolor=424242 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blackened Barrel''<br>&emsp;Wargames Foundry<br>&emsp;105B
<td bgcolor=414141 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Blackened Barrel''<br>&emsp;Wargames Foundry<br>&emsp;105C
<td bgcolor=43627E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Prussian Gun Mid Blue''<br>&emsp;Wargames Foundry<br>&emsp;106A
<td bgcolor=43739C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Prussian Gun Mid Blue''<br>&emsp;Wargames Foundry<br>&emsp;106B
<td bgcolor=6097BE style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Prussian Gun Mid Blue''<br>&emsp;Wargames Foundry<br>&emsp;106C
<td bgcolor=A2B866 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Austrian Gun Ochre''<br>&emsp;Wargames Foundry<br>&emsp;107A
<td bgcolor=BEC76A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Austrian Gun Ochre''<br>&emsp;Wargames Foundry<br>&emsp;107B
<td bgcolor=DBCE68 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Austrian Gun Ochre''<br>&emsp;Wargames Foundry<br>&emsp;107C
<td bgcolor=7799A3 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Gun Grey''<br>&emsp;Wargames Foundry<br>&emsp;108A
<td bgcolor=8AA1A8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Gun Grey''<br>&emsp;Wargames Foundry<br>&emsp;108B
<td bgcolor=9FB2B8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''British Gun Grey''<br>&emsp;Wargames Foundry<br>&emsp;108C
<td bgcolor=518756 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Gun Olive Green''<br>&emsp;Wargames Foundry<br>&emsp;109A
<td bgcolor=85AE6A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Gun Olive Green''<br>&emsp;Wargames Foundry<br>&emsp;109B
<td bgcolor=A5BF82 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''French Gun Olive Green''<br>&emsp;Wargames Foundry<br>&emsp;109C
<td bgcolor=386153 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Gun Apple Green''<br>&emsp;Wargames Foundry<br>&emsp;110A
<td bgcolor=487751 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Gun Apple Green''<br>&emsp;Wargames Foundry<br>&emsp;110B
<td bgcolor=73A37B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Russian Gun Apple Green''<br>&emsp;Wargames Foundry<br>&emsp;110C
<td bgcolor=1B2C33 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Union Blue''<br>&emsp;Wargames Foundry<br>&emsp;111A
<td bgcolor=002542 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Union Blue''<br>&emsp;Wargames Foundry<br>&emsp;111B
<td bgcolor=0F3B5E style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Union Blue''<br>&emsp;Wargames Foundry<br>&emsp;111C
<td bgcolor=6582AA style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Union Trouser Blue''<br>&emsp;Wargames Foundry<br>&emsp;112A
<td bgcolor=779CC8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Union Trouser Blue''<br>&emsp;Wargames Foundry<br>&emsp;112B
<td bgcolor=92B6D8 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Union Trouser Blue''<br>&emsp;Wargames Foundry<br>&emsp;112C
<td bgcolor=825C49 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rich Butternut''<br>&emsp;Wargames Foundry<br>&emsp;115A
<td bgcolor=996B51 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rich Butternut''<br>&emsp;Wargames Foundry<br>&emsp;115B
<td bgcolor=A3835A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rich Butternut''<br>&emsp;Wargames Foundry<br>&emsp;115C
<td bgcolor=776044 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Drab Butternut''<br>&emsp;Wargames Foundry<br>&emsp;116A
<td bgcolor=80644F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Drab Butternut''<br>&emsp;Wargames Foundry<br>&emsp;116B
<td bgcolor=8C7154 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Drab Butternut''<br>&emsp;Wargames Foundry<br>&emsp;116C
<td bgcolor=4E5766 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Confederate Grey''<br>&emsp;Wargames Foundry<br>&emsp;117A
<td bgcolor=526375 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Confederate Grey''<br>&emsp;Wargames Foundry<br>&emsp;117B
<td bgcolor=5C6F87 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Confederate Grey''<br>&emsp;Wargames Foundry<br>&emsp;117C
<td bgcolor=515A5F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rebel Grey''<br>&emsp;Wargames Foundry<br>&emsp;118A
<td bgcolor=616870 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rebel Grey''<br>&emsp;Wargames Foundry<br>&emsp;118B
<td bgcolor=717783 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Rebel Grey''<br>&emsp;Wargames Foundry<br>&emsp;118C
<td bgcolor=8E5949 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''South American Flesh''<br>&emsp;Wargames Foundry<br>&emsp;119A
<td bgcolor=B36F5C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''South American Flesh''<br>&emsp;Wargames Foundry<br>&emsp;119B
<td bgcolor=D1866F style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''South American Flesh''<br>&emsp;Wargames Foundry<br>&emsp;119C
<td bgcolor=B7564D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Native American Flesh''<br>&emsp;Wargames Foundry<br>&emsp;120A
<td bgcolor=ED6F56 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Native American Flesh''<br>&emsp;Wargames Foundry<br>&emsp;120B
<td bgcolor=F58764 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Native American Flesh''<br>&emsp;Wargames Foundry<br>&emsp;120C
<td bgcolor=4D4C4A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;121A
<td bgcolor=5C5044 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;121B
<td bgcolor=786755 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Dark African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;121C
<td bgcolor=C47C56 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Oriental Flesh''<br>&emsp;Wargames Foundry<br>&emsp;122A
<td bgcolor=E59E5C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Oriental Flesh''<br>&emsp;Wargames Foundry<br>&emsp;122B
<td bgcolor=F0B58B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Oriental Flesh''<br>&emsp;Wargames Foundry<br>&emsp;122C
<td bgcolor=9E6F5D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Near Eastern Flesh''<br>&emsp;Wargames Foundry<br>&emsp;123A
<td bgcolor=B08574 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Near Eastern Flesh''<br>&emsp;Wargames Foundry<br>&emsp;123B
<td bgcolor=C2947A style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Near Eastern Flesh''<br>&emsp;Wargames Foundry<br>&emsp;123C
<td bgcolor=95554C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''North African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;124A
<td bgcolor=B36F5C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''North African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;124B
<td bgcolor=D18673 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''North African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;124C
<td bgcolor=DA6A42 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Mediterranean Flesh''<br>&emsp;Wargames Foundry<br>&emsp;125A
<td bgcolor=E38164 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Mediterranean Flesh''<br>&emsp;Wargames Foundry<br>&emsp;125B
<td bgcolor=F79666 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Mediterranean Flesh''<br>&emsp;Wargames Foundry<br>&emsp;125C
<td bgcolor=5C454B style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;126A
<td bgcolor=73484D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;126B
<td bgcolor=8F4F50 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''African Flesh''<br>&emsp;Wargames Foundry<br>&emsp;126C
<td bgcolor=D45B46 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Expert Flesh Deep''<br>&emsp;Wargames Foundry<br>&emsp;127A
<td bgcolor=FEC89C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Expert Flesh''<br>&emsp;Wargames Foundry<br>&emsp;127B
<td bgcolor=FFA36D style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Expert Flesh''<br>&emsp;Wargames Foundry<br>&emsp;127C
<td bgcolor=FFB382 style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Expert Flesh''<br>&emsp;Wargames Foundry<br>&emsp;127D
<td bgcolor=FEC89C style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Expert Flesh Ultra''<br>&emsp;Wargames Foundry<br>&emsp;127E
<td bgcolor=FEEBCB style=float:left><br>&emsp;&emsp;&emsp;&emsp;<br>&emsp;&emsp;&emsp;&emsp;<br></td>&emsp;''Expert Flesh Final Highlight''<br>&emsp;Wargames Foundry<br>&emsp;127F
|^{{Wargames Foundry 001A}}<br><hr><$list filter="[color_match[Wargames Foundry 001A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 001B}}<br><hr><$list filter="[color_match[Wargames Foundry 001B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 001C}}<br><hr><$list filter="[color_match[Wargames Foundry 001C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 002A}}<br><hr><$list filter="[color_match[Wargames Foundry 002A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 002B}}<br><hr><$list filter="[color_match[Wargames Foundry 002B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 002C}}<br><hr><$list filter="[color_match[Wargames Foundry 002C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 003A}}<br><hr><$list filter="[color_match[Wargames Foundry 003A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 003B}}<br><hr><$list filter="[color_match[Wargames Foundry 003B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 003C}}<br><hr><$list filter="[color_match[Wargames Foundry 003C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 004A}}<br><hr><$list filter="[color_match[Wargames Foundry 004A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 004B}}<br><hr><$list filter="[color_match[Wargames Foundry 004B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 004C}}<br><hr><$list filter="[color_match[Wargames Foundry 004C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 005A}}<br><hr><$list filter="[color_match[Wargames Foundry 005A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 005B}}<br><hr><$list filter="[color_match[Wargames Foundry 005B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 005C}}<br><hr><$list filter="[color_match[Wargames Foundry 005C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 006A}}<br><hr><$list filter="[color_match[Wargames Foundry 006A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 006B}}<br><hr><$list filter="[color_match[Wargames Foundry 006B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 006C}}<br><hr><$list filter="[color_match[Wargames Foundry 006C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 007A}}<br><hr><$list filter="[color_match[Wargames Foundry 007A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 007B}}<br><hr><$list filter="[color_match[Wargames Foundry 007B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 007C}}<br><hr><$list filter="[color_match[Wargames Foundry 007C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 008A}}<br><hr><$list filter="[color_match[Wargames Foundry 008A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 008B}}<br><hr><$list filter="[color_match[Wargames Foundry 008B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 008C}}<br><hr><$list filter="[color_match[Wargames Foundry 008C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 009A}}<br><hr><$list filter="[color_match[Wargames Foundry 009A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 009B}}<br><hr><$list filter="[color_match[Wargames Foundry 009B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 009C}}<br><hr><$list filter="[color_match[Wargames Foundry 009C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 010A}}<br><hr><$list filter="[color_match[Wargames Foundry 010A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 010B}}<br><hr><$list filter="[color_match[Wargames Foundry 010B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 010C}}<br><hr><$list filter="[color_match[Wargames Foundry 010C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 011A}}<br><hr><$list filter="[color_match[Wargames Foundry 011A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 011B}}<br><hr><$list filter="[color_match[Wargames Foundry 011B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 011C}}<br><hr><$list filter="[color_match[Wargames Foundry 011C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 012A}}<br><hr><$list filter="[color_match[Wargames Foundry 012A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 012B}}<br><hr><$list filter="[color_match[Wargames Foundry 012B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 012C}}<br><hr><$list filter="[color_match[Wargames Foundry 012C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 013A}}<br><hr><$list filter="[color_match[Wargames Foundry 013A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 013B}}<br><hr><$list filter="[color_match[Wargames Foundry 013B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 013C}}<br><hr><$list filter="[color_match[Wargames Foundry 013C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 014A}}<br><hr><$list filter="[color_match[Wargames Foundry 014A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 014B}}<br><hr><$list filter="[color_match[Wargames Foundry 014B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 014C}}<br><hr><$list filter="[color_match[Wargames Foundry 014C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 015A}}<br><hr><$list filter="[color_match[Wargames Foundry 015A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 015B}}<br><hr><$list filter="[color_match[Wargames Foundry 015B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 015C}}<br><hr><$list filter="[color_match[Wargames Foundry 015C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 016A}}<br><hr><$list filter="[color_match[Wargames Foundry 016A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 016B}}<br><hr><$list filter="[color_match[Wargames Foundry 016B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 016C}}<br><hr><$list filter="[color_match[Wargames Foundry 016C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 017A}}<br><hr><$list filter="[color_match[Wargames Foundry 017A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 017B}}<br><hr><$list filter="[color_match[Wargames Foundry 017B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 017C}}<br><hr><$list filter="[color_match[Wargames Foundry 017C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 018A}}<br><hr><$list filter="[color_match[Wargames Foundry 018A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 018B}}<br><hr><$list filter="[color_match[Wargames Foundry 018B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 018C}}<br><hr><$list filter="[color_match[Wargames Foundry 018C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 019A}}<br><hr><$list filter="[color_match[Wargames Foundry 019A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 019B}}<br><hr><$list filter="[color_match[Wargames Foundry 019B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 019C}}<br><hr><$list filter="[color_match[Wargames Foundry 019C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 020A}}<br><hr><$list filter="[color_match[Wargames Foundry 020A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 020B}}<br><hr><$list filter="[color_match[Wargames Foundry 020B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 020C}}<br><hr><$list filter="[color_match[Wargames Foundry 020C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 021A}}<br><hr><$list filter="[color_match[Wargames Foundry 021A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 021B}}<br><hr><$list filter="[color_match[Wargames Foundry 021B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 021C}}<br><hr><$list filter="[color_match[Wargames Foundry 021C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 022A}}<br><hr><$list filter="[color_match[Wargames Foundry 022A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 022B}}<br><hr><$list filter="[color_match[Wargames Foundry 022B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 022C}}<br><hr><$list filter="[color_match[Wargames Foundry 022C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 023A}}<br><hr><$list filter="[color_match[Wargames Foundry 023A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 023B}}<br><hr><$list filter="[color_match[Wargames Foundry 023B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 023C}}<br><hr><$list filter="[color_match[Wargames Foundry 023C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 024A}}<br><hr><$list filter="[color_match[Wargames Foundry 024A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 024B}}<br><hr><$list filter="[color_match[Wargames Foundry 024B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 024C}}<br><hr><$list filter="[color_match[Wargames Foundry 024C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 025A}}<br><hr><$list filter="[color_match[Wargames Foundry 025A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 025B}}<br><hr><$list filter="[color_match[Wargames Foundry 025B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 025C}}<br><hr><$list filter="[color_match[Wargames Foundry 025C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 026A}}<br><hr><$list filter="[color_match[Wargames Foundry 026A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 026B}}<br><hr><$list filter="[color_match[Wargames Foundry 026B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 026C}}<br><hr><$list filter="[color_match[Wargames Foundry 026C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 027A}}<br><hr><$list filter="[color_match[Wargames Foundry 027A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 027B}}<br><hr><$list filter="[color_match[Wargames Foundry 027B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 027C}}<br><hr><$list filter="[color_match[Wargames Foundry 027C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 028A}}<br><hr><$list filter="[color_match[Wargames Foundry 028A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 028B}}<br><hr><$list filter="[color_match[Wargames Foundry 028B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 028C}}<br><hr><$list filter="[color_match[Wargames Foundry 028C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 029A}}<br><hr><$list filter="[color_match[Wargames Foundry 029A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 029B}}<br><hr><$list filter="[color_match[Wargames Foundry 029B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 029C}}<br><hr><$list filter="[color_match[Wargames Foundry 029C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 030A}}<br><hr><$list filter="[color_match[Wargames Foundry 030A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 030B}}<br><hr><$list filter="[color_match[Wargames Foundry 030B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 030C}}<br><hr><$list filter="[color_match[Wargames Foundry 030C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 031A}}<br><hr><$list filter="[color_match[Wargames Foundry 031A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 031B}}<br><hr><$list filter="[color_match[Wargames Foundry 031B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 031C}}<br><hr><$list filter="[color_match[Wargames Foundry 031C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 032A}}<br><hr><$list filter="[color_match[Wargames Foundry 032A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 032B}}<br><hr><$list filter="[color_match[Wargames Foundry 032B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 032C}}<br><hr><$list filter="[color_match[Wargames Foundry 032C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 033A}}<br><hr><$list filter="[color_match[Wargames Foundry 033A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 033B}}<br><hr><$list filter="[color_match[Wargames Foundry 033B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 033C}}<br><hr><$list filter="[color_match[Wargames Foundry 033C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 034A}}<br><hr><$list filter="[color_match[Wargames Foundry 034A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 034B}}<br><hr><$list filter="[color_match[Wargames Foundry 034B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 034C}}<br><hr><$list filter="[color_match[Wargames Foundry 034C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 035A}}<br><hr><$list filter="[color_match[Wargames Foundry 035A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 035B}}<br><hr><$list filter="[color_match[Wargames Foundry 035B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 035C}}<br><hr><$list filter="[color_match[Wargames Foundry 035C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 036A}}<br><hr><$list filter="[color_match[Wargames Foundry 036A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 036B}}<br><hr><$list filter="[color_match[Wargames Foundry 036B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 036C}}<br><hr><$list filter="[color_match[Wargames Foundry 036C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 037A}}<br><hr><$list filter="[color_match[Wargames Foundry 037A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 037B}}<br><hr><$list filter="[color_match[Wargames Foundry 037B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 037C}}<br><hr><$list filter="[color_match[Wargames Foundry 037C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 038A}}<br><hr><$list filter="[color_match[Wargames Foundry 038A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 038B}}<br><hr><$list filter="[color_match[Wargames Foundry 038B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 038C}}<br><hr><$list filter="[color_match[Wargames Foundry 038C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 039A}}<br><hr><$list filter="[color_match[Wargames Foundry 039A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 039B}}<br><hr><$list filter="[color_match[Wargames Foundry 039B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 039C}}<br><hr><$list filter="[color_match[Wargames Foundry 039C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 040A}}<br><hr><$list filter="[color_match[Wargames Foundry 040A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 040B}}<br><hr><$list filter="[color_match[Wargames Foundry 040B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 040C}}<br><hr><$list filter="[color_match[Wargames Foundry 040C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 041A}}<br><hr><$list filter="[color_match[Wargames Foundry 041A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 041B}}<br><hr><$list filter="[color_match[Wargames Foundry 041B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 041C}}<br><hr><$list filter="[color_match[Wargames Foundry 041C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 042A}}<br><hr><$list filter="[color_match[Wargames Foundry 042A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 042B}}<br><hr><$list filter="[color_match[Wargames Foundry 042B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 042C}}<br><hr><$list filter="[color_match[Wargames Foundry 042C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 043A}}<br><hr><$list filter="[color_match[Wargames Foundry 043A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 043B}}<br><hr><$list filter="[color_match[Wargames Foundry 043B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 043C}}<br><hr><$list filter="[color_match[Wargames Foundry 043C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 044A}}<br><hr><$list filter="[color_match[Wargames Foundry 044A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 044B}}<br><hr><$list filter="[color_match[Wargames Foundry 044B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 044C}}<br><hr><$list filter="[color_match[Wargames Foundry 044C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 045A}}<br><hr><$list filter="[color_match[Wargames Foundry 045A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 045B}}<br><hr><$list filter="[color_match[Wargames Foundry 045B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 045C}}<br><hr><$list filter="[color_match[Wargames Foundry 045C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 046A}}<br><hr><$list filter="[color_match[Wargames Foundry 046A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 046B}}<br><hr><$list filter="[color_match[Wargames Foundry 046B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 046C}}<br><hr><$list filter="[color_match[Wargames Foundry 046C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 053A}}<br><hr><$list filter="[color_match[Wargames Foundry 053A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 053B}}<br><hr><$list filter="[color_match[Wargames Foundry 053B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 053C}}<br><hr><$list filter="[color_match[Wargames Foundry 053C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 054A}}<br><hr><$list filter="[color_match[Wargames Foundry 054A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 054B}}<br><hr><$list filter="[color_match[Wargames Foundry 054B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 054C}}<br><hr><$list filter="[color_match[Wargames Foundry 054C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 055A}}<br><hr><$list filter="[color_match[Wargames Foundry 055A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 055B}}<br><hr><$list filter="[color_match[Wargames Foundry 055B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 055C}}<br><hr><$list filter="[color_match[Wargames Foundry 055C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 056A}}<br><hr><$list filter="[color_match[Wargames Foundry 056A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 056B}}<br><hr><$list filter="[color_match[Wargames Foundry 056B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 056C}}<br><hr><$list filter="[color_match[Wargames Foundry 056C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 057A}}<br><hr><$list filter="[color_match[Wargames Foundry 057A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 057B}}<br><hr><$list filter="[color_match[Wargames Foundry 057B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 057C}}<br><hr><$list filter="[color_match[Wargames Foundry 057C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 058A}}<br><hr><$list filter="[color_match[Wargames Foundry 058A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 058B}}<br><hr><$list filter="[color_match[Wargames Foundry 058B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 058C}}<br><hr><$list filter="[color_match[Wargames Foundry 058C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 060A}}<br><hr><$list filter="[color_match[Wargames Foundry 060A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 060B}}<br><hr><$list filter="[color_match[Wargames Foundry 060B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 060C}}<br><hr><$list filter="[color_match[Wargames Foundry 060C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 061A}}<br><hr><$list filter="[color_match[Wargames Foundry 061A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 061B}}<br><hr><$list filter="[color_match[Wargames Foundry 061B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 061C}}<br><hr><$list filter="[color_match[Wargames Foundry 061C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 062A}}<br><hr><$list filter="[color_match[Wargames Foundry 062A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 062B}}<br><hr><$list filter="[color_match[Wargames Foundry 062B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 062C}}<br><hr><$list filter="[color_match[Wargames Foundry 062C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 063A}}<br><hr><$list filter="[color_match[Wargames Foundry 063A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 063B}}<br><hr><$list filter="[color_match[Wargames Foundry 063B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 063C}}<br><hr><$list filter="[color_match[Wargames Foundry 063C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 064A}}<br><hr><$list filter="[color_match[Wargames Foundry 064A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 064B}}<br><hr><$list filter="[color_match[Wargames Foundry 064B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 064C}}<br><hr><$list filter="[color_match[Wargames Foundry 064C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 065A}}<br><hr><$list filter="[color_match[Wargames Foundry 065A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 065B}}<br><hr><$list filter="[color_match[Wargames Foundry 065B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 065C}}<br><hr><$list filter="[color_match[Wargames Foundry 065C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 066A}}<br><hr><$list filter="[color_match[Wargames Foundry 066A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 066B}}<br><hr><$list filter="[color_match[Wargames Foundry 066B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 066C}}<br><hr><$list filter="[color_match[Wargames Foundry 066C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 067A}}<br><hr><$list filter="[color_match[Wargames Foundry 067A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 067B}}<br><hr><$list filter="[color_match[Wargames Foundry 067B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 067C}}<br><hr><$list filter="[color_match[Wargames Foundry 067C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 068A}}<br><hr><$list filter="[color_match[Wargames Foundry 068A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 068B}}<br><hr><$list filter="[color_match[Wargames Foundry 068B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 068C}}<br><hr><$list filter="[color_match[Wargames Foundry 068C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 069A}}<br><hr><$list filter="[color_match[Wargames Foundry 069A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 069B}}<br><hr><$list filter="[color_match[Wargames Foundry 069B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 069C}}<br><hr><$list filter="[color_match[Wargames Foundry 069C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 070A}}<br><hr><$list filter="[color_match[Wargames Foundry 070A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 070B}}<br><hr><$list filter="[color_match[Wargames Foundry 070B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 070C}}<br><hr><$list filter="[color_match[Wargames Foundry 070C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 071A}}<br><hr><$list filter="[color_match[Wargames Foundry 071A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 071B}}<br><hr><$list filter="[color_match[Wargames Foundry 071B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 071C}}<br><hr><$list filter="[color_match[Wargames Foundry 071C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 072A}}<br><hr><$list filter="[color_match[Wargames Foundry 072A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 072B}}<br><hr><$list filter="[color_match[Wargames Foundry 072B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 072C}}<br><hr><$list filter="[color_match[Wargames Foundry 072C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 073A}}<br><hr><$list filter="[color_match[Wargames Foundry 073A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 073B}}<br><hr><$list filter="[color_match[Wargames Foundry 073B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 073C}}<br><hr><$list filter="[color_match[Wargames Foundry 073C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 074A}}<br><hr><$list filter="[color_match[Wargames Foundry 074A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 074B}}<br><hr><$list filter="[color_match[Wargames Foundry 074B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 074C}}<br><hr><$list filter="[color_match[Wargames Foundry 074C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 075A}}<br><hr><$list filter="[color_match[Wargames Foundry 075A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 075B}}<br><hr><$list filter="[color_match[Wargames Foundry 075B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 075C}}<br><hr><$list filter="[color_match[Wargames Foundry 075C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 076A}}<br><hr><$list filter="[color_match[Wargames Foundry 076A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 076B}}<br><hr><$list filter="[color_match[Wargames Foundry 076B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 076C}}<br><hr><$list filter="[color_match[Wargames Foundry 076C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 077A}}<br><hr><$list filter="[color_match[Wargames Foundry 077A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 077B}}<br><hr><$list filter="[color_match[Wargames Foundry 077B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 077C}}<br><hr><$list filter="[color_match[Wargames Foundry 077C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 078A}}<br><hr><$list filter="[color_match[Wargames Foundry 078A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 078B}}<br><hr><$list filter="[color_match[Wargames Foundry 078B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 078C}}<br><hr><$list filter="[color_match[Wargames Foundry 078C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 079A}}<br><hr><$list filter="[color_match[Wargames Foundry 079A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 079B}}<br><hr><$list filter="[color_match[Wargames Foundry 079B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 079C}}<br><hr><$list filter="[color_match[Wargames Foundry 079C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 080A}}<br><hr><$list filter="[color_match[Wargames Foundry 080A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 080B}}<br><hr><$list filter="[color_match[Wargames Foundry 080B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 080C}}<br><hr><$list filter="[color_match[Wargames Foundry 080C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 081A}}<br><hr><$list filter="[color_match[Wargames Foundry 081A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 081B}}<br><hr><$list filter="[color_match[Wargames Foundry 081B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 081C}}<br><hr><$list filter="[color_match[Wargames Foundry 081C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 082A}}<br><hr><$list filter="[color_match[Wargames Foundry 082A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 082B}}<br><hr><$list filter="[color_match[Wargames Foundry 082B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 082C}}<br><hr><$list filter="[color_match[Wargames Foundry 082C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 083A}}<br><hr><$list filter="[color_match[Wargames Foundry 083A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 083B}}<br><hr><$list filter="[color_match[Wargames Foundry 083B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 083C}}<br><hr><$list filter="[color_match[Wargames Foundry 083C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 084A}}<br><hr><$list filter="[color_match[Wargames Foundry 084A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 084B}}<br><hr><$list filter="[color_match[Wargames Foundry 084B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 084C}}<br><hr><$list filter="[color_match[Wargames Foundry 084C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 085A}}<br><hr><$list filter="[color_match[Wargames Foundry 085A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 085B}}<br><hr><$list filter="[color_match[Wargames Foundry 085B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 085C}}<br><hr><$list filter="[color_match[Wargames Foundry 085C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 086A}}<br><hr><$list filter="[color_match[Wargames Foundry 086A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 086B}}<br><hr><$list filter="[color_match[Wargames Foundry 086B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 086C}}<br><hr><$list filter="[color_match[Wargames Foundry 086C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 087A}}<br><hr><$list filter="[color_match[Wargames Foundry 087A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 087B}}<br><hr><$list filter="[color_match[Wargames Foundry 087B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 087C}}<br><hr><$list filter="[color_match[Wargames Foundry 087C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 088A}}<br><hr><$list filter="[color_match[Wargames Foundry 088A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 088B}}<br><hr><$list filter="[color_match[Wargames Foundry 088B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 088C}}<br><hr><$list filter="[color_match[Wargames Foundry 088C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 089A}}<br><hr><$list filter="[color_match[Wargames Foundry 089A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 089B}}<br><hr><$list filter="[color_match[Wargames Foundry 089B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 089C}}<br><hr><$list filter="[color_match[Wargames Foundry 089C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 090A}}<br><hr><$list filter="[color_match[Wargames Foundry 090A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 090B}}<br><hr><$list filter="[color_match[Wargames Foundry 090B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 090C}}<br><hr><$list filter="[color_match[Wargames Foundry 090C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 091A}}<br><hr><$list filter="[color_match[Wargames Foundry 091A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 091B}}<br><hr><$list filter="[color_match[Wargames Foundry 091B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 091C}}<br><hr><$list filter="[color_match[Wargames Foundry 091C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 092A}}<br><hr><$list filter="[color_match[Wargames Foundry 092A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 092B}}<br><hr><$list filter="[color_match[Wargames Foundry 092B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 092C}}<br><hr><$list filter="[color_match[Wargames Foundry 092C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 093A}}<br><hr><$list filter="[color_match[Wargames Foundry 093A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 093B}}<br><hr><$list filter="[color_match[Wargames Foundry 093B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 093C}}<br><hr><$list filter="[color_match[Wargames Foundry 093C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 094A}}<br><hr><$list filter="[color_match[Wargames Foundry 094A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 094B}}<br><hr><$list filter="[color_match[Wargames Foundry 094B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 094C}}<br><hr><$list filter="[color_match[Wargames Foundry 094C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 095A}}<br><hr><$list filter="[color_match[Wargames Foundry 095A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 095B}}<br><hr><$list filter="[color_match[Wargames Foundry 095B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 095C}}<br><hr><$list filter="[color_match[Wargames Foundry 095C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 096A}}<br><hr><$list filter="[color_match[Wargames Foundry 096A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 096B}}<br><hr><$list filter="[color_match[Wargames Foundry 096B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 096C}}<br><hr><$list filter="[color_match[Wargames Foundry 096C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 097A}}<br><hr><$list filter="[color_match[Wargames Foundry 097A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 097B}}<br><hr><$list filter="[color_match[Wargames Foundry 097B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 097C}}<br><hr><$list filter="[color_match[Wargames Foundry 097C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 098A}}<br><hr><$list filter="[color_match[Wargames Foundry 098A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 098B}}<br><hr><$list filter="[color_match[Wargames Foundry 098B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 098C}}<br><hr><$list filter="[color_match[Wargames Foundry 098C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 099A}}<br><hr><$list filter="[color_match[Wargames Foundry 099A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 099B}}<br><hr><$list filter="[color_match[Wargames Foundry 099B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 099C}}<br><hr><$list filter="[color_match[Wargames Foundry 099C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 100A}}<br><hr><$list filter="[color_match[Wargames Foundry 100A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 100B}}<br><hr><$list filter="[color_match[Wargames Foundry 100B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 100C}}<br><hr><$list filter="[color_match[Wargames Foundry 100C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 101A}}<br><hr><$list filter="[color_match[Wargames Foundry 101A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 101B}}<br><hr><$list filter="[color_match[Wargames Foundry 101B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 101C}}<br><hr><$list filter="[color_match[Wargames Foundry 101C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 102A}}<br><hr><$list filter="[color_match[Wargames Foundry 102A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 102B}}<br><hr><$list filter="[color_match[Wargames Foundry 102B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 102C}}<br><hr><$list filter="[color_match[Wargames Foundry 102C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 103A}}<br><hr><$list filter="[color_match[Wargames Foundry 103A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 103B}}<br><hr><$list filter="[color_match[Wargames Foundry 103B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 103C}}<br><hr><$list filter="[color_match[Wargames Foundry 103C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 104A}}<br><hr><$list filter="[color_match[Wargames Foundry 104A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 104B}}<br><hr><$list filter="[color_match[Wargames Foundry 104B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 104C}}<br><hr><$list filter="[color_match[Wargames Foundry 104C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 105A}}<br><hr><$list filter="[color_match[Wargames Foundry 105A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 105B}}<br><hr><$list filter="[color_match[Wargames Foundry 105B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 105C}}<br><hr><$list filter="[color_match[Wargames Foundry 105C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 106A}}<br><hr><$list filter="[color_match[Wargames Foundry 106A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 106B}}<br><hr><$list filter="[color_match[Wargames Foundry 106B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 106C}}<br><hr><$list filter="[color_match[Wargames Foundry 106C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 107A}}<br><hr><$list filter="[color_match[Wargames Foundry 107A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 107B}}<br><hr><$list filter="[color_match[Wargames Foundry 107B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 107C}}<br><hr><$list filter="[color_match[Wargames Foundry 107C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 108A}}<br><hr><$list filter="[color_match[Wargames Foundry 108A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 108B}}<br><hr><$list filter="[color_match[Wargames Foundry 108B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 108C}}<br><hr><$list filter="[color_match[Wargames Foundry 108C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 109A}}<br><hr><$list filter="[color_match[Wargames Foundry 109A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 109B}}<br><hr><$list filter="[color_match[Wargames Foundry 109B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 109C}}<br><hr><$list filter="[color_match[Wargames Foundry 109C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 110A}}<br><hr><$list filter="[color_match[Wargames Foundry 110A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 110B}}<br><hr><$list filter="[color_match[Wargames Foundry 110B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 110C}}<br><hr><$list filter="[color_match[Wargames Foundry 110C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 111A}}<br><hr><$list filter="[color_match[Wargames Foundry 111A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 111B}}<br><hr><$list filter="[color_match[Wargames Foundry 111B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 111C}}<br><hr><$list filter="[color_match[Wargames Foundry 111C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 112A}}<br><hr><$list filter="[color_match[Wargames Foundry 112A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 112B}}<br><hr><$list filter="[color_match[Wargames Foundry 112B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 112C}}<br><hr><$list filter="[color_match[Wargames Foundry 112C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 115A}}<br><hr><$list filter="[color_match[Wargames Foundry 115A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 115B}}<br><hr><$list filter="[color_match[Wargames Foundry 115B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 115C}}<br><hr><$list filter="[color_match[Wargames Foundry 115C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 116A}}<br><hr><$list filter="[color_match[Wargames Foundry 116A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 116B}}<br><hr><$list filter="[color_match[Wargames Foundry 116B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 116C}}<br><hr><$list filter="[color_match[Wargames Foundry 116C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 117A}}<br><hr><$list filter="[color_match[Wargames Foundry 117A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 117B}}<br><hr><$list filter="[color_match[Wargames Foundry 117B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 117C}}<br><hr><$list filter="[color_match[Wargames Foundry 117C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 118A}}<br><hr><$list filter="[color_match[Wargames Foundry 118A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 118B}}<br><hr><$list filter="[color_match[Wargames Foundry 118B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 118C}}<br><hr><$list filter="[color_match[Wargames Foundry 118C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 119A}}<br><hr><$list filter="[color_match[Wargames Foundry 119A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 119B}}<br><hr><$list filter="[color_match[Wargames Foundry 119B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 119C}}<br><hr><$list filter="[color_match[Wargames Foundry 119C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 120A}}<br><hr><$list filter="[color_match[Wargames Foundry 120A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 120B}}<br><hr><$list filter="[color_match[Wargames Foundry 120B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 120C}}<br><hr><$list filter="[color_match[Wargames Foundry 120C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 121A}}<br><hr><$list filter="[color_match[Wargames Foundry 121A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 121B}}<br><hr><$list filter="[color_match[Wargames Foundry 121B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 121C}}<br><hr><$list filter="[color_match[Wargames Foundry 121C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 122A}}<br><hr><$list filter="[color_match[Wargames Foundry 122A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 122B}}<br><hr><$list filter="[color_match[Wargames Foundry 122B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 122C}}<br><hr><$list filter="[color_match[Wargames Foundry 122C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 123A}}<br><hr><$list filter="[color_match[Wargames Foundry 123A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 123B}}<br><hr><$list filter="[color_match[Wargames Foundry 123B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 123C}}<br><hr><$list filter="[color_match[Wargames Foundry 123C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 124A}}<br><hr><$list filter="[color_match[Wargames Foundry 124A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 124B}}<br><hr><$list filter="[color_match[Wargames Foundry 124B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 124C}}<br><hr><$list filter="[color_match[Wargames Foundry 124C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 125A}}<br><hr><$list filter="[color_match[Wargames Foundry 125A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 125B}}<br><hr><$list filter="[color_match[Wargames Foundry 125B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 125C}}<br><hr><$list filter="[color_match[Wargames Foundry 125C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 126A}}<br><hr><$list filter="[color_match[Wargames Foundry 126A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 126B}}<br><hr><$list filter="[color_match[Wargames Foundry 126B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 126C}}<br><hr><$list filter="[color_match[Wargames Foundry 126C]]"><$transclude field="text" mode="block"/></$list> |
|^{{Wargames Foundry 127A}}<br><hr><$list filter="[color_match[Wargames Foundry 127A]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 127B}}<br><hr><$list filter="[color_match[Wargames Foundry 127B]]"><$transclude field="text" mode="block"/></$list> |^{{Wargames Foundry 127C}}<br><hr><$list filter="[color_match[Wargames Foundry 127C]]"><$transclude field="text" mode="block"/></$list> |
;Carl Goolsby, MD
:[img[Carl Goolsby, MD.image]]
:Dr. Goolsby earned his Doctorate of Medicine from Emory University in Atlanta, Ga., and completed his residency in family practice in the U.S. Army Medical Department. He is board certified in family practice. Dr. Goolsby was recognized by the National Committee for Quality Assurance's (NCQA) Bridges to Excellence program for his quality diabetes care and management.

;Glenda Summerville, NP



;Location & Phone Numbers
:144 Bill Carruth Parkway Suite 2200
:Hiram, GA 30141-3818
:Phone: (678) 945-8200

;Appointments
:14 Jan 2021 
::0845
::Annual Medical
::Ask to increase blood pressure medication

;How to play Whist
```
    [Orca, T1 Orca Self-Healer]
    Co-Processor II
    Co-Processor II

    Shield Boost Amplifier II
    Shield Boost Amplifier II
    X-Large Shield Booster II
    Large Shield Booster II
    Large Shield Booster II

    Shield Command Burst I
    Shield Command Burst I
    Shield Command Burst I

    Large Core Defense Field Extender II
    Large Core Defense Field Extender II
    Large Core Defense Field Extender II

    Federation Navy Hammerhead x5

    Shield Extension Charge x1200
    Targeting Range Script x1
    Navy Cap Booster 800 x5
    Active Shielding Charge x1200
    Shield Harmonizing Charge x1200
```


---

```
    [Orca, T1 Orca Stand Alone Carrier]
    Damage Control II
    Drone Damage Amplifier I

    Adaptive Invulnerability Field I
    Adaptive Invulnerability Field I
    Medium Capacitor Booster I
    Sensor Booster I
    Large Shield Booster II

    Shield Command Burst I
    Shield Command Burst I
    Shield Command Burst I
    Drone Link Augmentor I
    Drone Link Augmentor I
    Drone Link Augmentor I

    Large Core Defense Field Extender II
    Large Core Defense Field Extender II
    Large Core Defense Field Extender II

    Federation Navy Hammerhead x5

    Shield Extension Charge x900
    Targeting Range Script x1
    Active Shielding Charge x900
    Navy Cap Booster 800 x5
    Shield Harmonizing Charge x900
```
[[With Pyjamas through the Desert|https://withpyjamasthroughthedessert.blogspot.com/]] is the website for the author of the Sands of Sudan game.

---

<iframe  width='100%' height='600px' style="border:none;" src="http://withpyjamasthroughthedessert.blogspot.com/"></iframe>
I need to get back in touch with WoFun and see about getting more pikemen for my ECW collection.

Then I should see about getting more units for my Ancients game. This should also include looking at the Enemies of Rome from their newer collection.



<iframe  width='100%' height='600px' style="border:0px #ffffff none;"  src="https://over-open-sights.blogspot.com/2014/11/ww1-uniform-triads-from-ak-interactive.html"></iframe>